zoukankan
html css js c++ java
OO的感觉
看了这篇文章《
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉
》。
第一感觉就是作者对OO的理解和运用都不够深入。他给的例子好像也不是很OO,可惜不知道作者的邮箱,只能将改正后的代码贴在自己的blog中了。
namespace
Lin
{
//
"使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉"的回复
public
interface
IMessageReceive
{
bool
SaveMessage(MessageInfo message);
//
其它省略
}
public
class
OAMessageReceive : IMessageReceive
{
public
bool
SaveMessage(MessageInfo message)
{
if
(message.Content.StartsWith(
"
OA
"
))
{
this
.Save(message);
return
true
;
}
return
false
;
}
private
void
Save(MessageInfo message)
{
//
保存信息到OA
}
}
public
class
ERPMessageReceive : IMessageReceive
{
public
bool
SaveMessage(MessageInfo message)
{
if
(message.Content.StartsWith(
"
ERP
"
))
{
this
.Save(message);
return
true
;
}
return
false
;
}
private
void
Save(MessageInfo message)
{
//
保存信息到ERP
}
}
public
class
MessageInfo
{
public
string
Mobile
{
get
{
return
_mobile; }
set
{ _mobile
=
value; }
}
public
DateTime ReceiveDate
{
get
{
return
_receiveDate; }
set
{ _receiveDate
=
value; }
}
public
string
Content
{
get
{
return
_content; }
set
{ _content
=
value; }
}
private
string
_mobile
=
string
.Empty;
private
DateTime _receiveDate;
private
string
_content
=
string
.Empty;
}
public
class
MessageReceiveManager
{
public
static
void
Execute()
{
List
<
IMessageReceive
>
messageReceiveList
=
new
List
<
IMessageReceive
>
();
//
这里从配置文件读取
List
<
MessageInfo
>
msgList
=
new
List
<
MessageInfo
>
();
//
这里从数据库读取
List
<
MessageInfo
>
errorList
=
new
List
<
MessageInfo
>
();
foreach
(MessageInfo item
in
msgList)
{
bool
result
=
false
;
foreach
(IMessageReceive handler
in
messageReceiveList)
{
if
(handler.SaveMessage(item))
{
result
=
true
;
break
;
}
}
if
(
!
result)
//
没能被处理
errorList.Add(item);
}
}
}
}
还有一种
public
class
MessageReceiveFactory
{
public
static
IMessageReceive CreateMessageReceive(
string
content)
{
//
这里使用反射,我这里直接使用IF
if
(content.StartsWith(
"
OA
"
))
return
new
OAMessageReceive();
else
if
(content.StartsWith(
"
ERP
"
))
return
new
ERPMessageReceive();
throw
new
Exception(
"
未能找到正确的处理者
"
);
}
}
/**/
///
<summary>
///
方法2
///
</summary>
public
static
void
Execute2()
{
List
<
MessageInfo
>
msgList
=
new
List
<
MessageInfo
>
();
//
这里从数据库读取
foreach
(MessageInfo item
in
msgList)
{
IMessageReceive handler
=
MessageReceiveFactory.CreateMessageReceive(item.Content);
handler.SaveMessage(item);
}
}
OO主要是为了变化。如果没有变化或者变化频率很小,个人觉得这时就不能体现OO的强大。
获取处理短信对象
public
class
Helper
{
private
static
string
path
=
string
.Empty;
private
static
List
<
IMessageReceive
>
lst;
private
static
object
obj
=
new
object
();
public
static
List
<
IMessageReceive
>
GetHandlers()
{
if
(lst
==
null
)
{
lock
(obj)
{
if
(lst
==
null
)
{
lst
=
new
List
<
IMessageReceive
>
();
path
=
System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings[
"
MessageConfig
"
]);
XmlDocument xmlDoc
=
new
XmlDocument();
xmlDoc.Load(path);
XmlNodeList list
=
xmlDoc.SelectNodes(
"
/*/add
"
);
foreach
(XmlNode node
in
list)
{
string
TypeName
=
node.Attributes[
"
Type
"
].Value;
IMessageReceive handler;
try
{
handler
=
Type.GetType(TypeName).Assembly.CreateInstance(TypeName)
as
IMessageReceive;
lst.Add(handler);
}
catch
{
continue
;
}
}
}
}
}
return
lst;
}
}
查看全文
相关阅读:
DLPAR中关于cpu资源的分配
官网下载storage manager方法
vsftpd中关于ftpusers和user_list两个文件的说明以及vsftpd.conf中的userlist_enable和userlist_deny两个配置项的解释
Windows10搭建FTP服务器
fdisk分区的起始扇区为什么是2048——linux 分区与启动的小故事
P740SAS卡报错的处理
linux 下route命令
实验01:构建FTP服务器
IBMx86 x3850 7143机器面板PCI灯亮
css的选择器汇总
原文地址:https://www.cnblogs.com/Linjianyu/p/1046875.html
最新文章
Integer 与int类型的区别使用
小楼之上的星空
IE7的快捷键
移动开发者的自学宝典:十大在线编程学习网站
spring security抛出AuthenticationException异常的原因
Remote Debugging Chrome on Android
Spring Security3.1登陆验证
JSP Tag Libraries spring security
spring security进级篇 V 自定义标签控制显示
在freemarker中使用jsp标签 Using FreeMarker with servlets
热门文章
easyui getSelections 为什么只能得到一条数据
代码女神
easyui 整棵树的刷新
JAVA读取矩阵文件,写入矩阵
JAVA的把JSON写入Properties
JAVA封装公用的导入导出功能
JAVA爬虫抓取页面的URL数据
NetBeans数据库笔记---三层架构
传智播客张孝祥java邮件开发随笔01
选电脑技巧
Copyright © 2011-2022 走看看