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;
}
}
查看全文
相关阅读:
“大型售票系统”和“真正的电商系统”在“库存”巨大的差异计算
c#有关udp可靠传输(包传输数据包) 升级
CreateCompatibleDC工作原理
Android 内存管理 &Memory Leak & OOM 分析
ubuntu文本界面乱码的中国解决方案
hdu 4972 A simple dynamic programming problem(高效)
java定义和实现接口
HTTP 404
pcre函数具体解释
Android项目开发五-《星星生活志》1.使用MediaRecorder录制音频
原文地址:https://www.cnblogs.com/Linjianyu/p/1046875.html
最新文章
Android视图状态及重绘流程分析,带你一步步深入了解View(三)
Android视图绘制流程完全解析,带你一步步深入了解View(二)
Android LayoutInflater原理分析,带你一步步深入了解View(一)
java接口传递数据的实例
Android Fragment 基本介绍
java中instanceof用法
Android ActionBar详解(三):ActionBar实现切换Tabs标签
C#之自己定义的implicit和explicit转换
用jsp写注冊页面
JAVA线程相互排斥问题
热门文章
apache2.2 虚拟主机配置
myeclipse6.0下载及注冊码
怎么获取Spring的ApplicationContext
深入分析C++引用
shell语法简单介绍
探索Android中的Parcel机制(上)
飞鸽传书2011下载(飞鸽传书)
Eclipse UML小工具AmaterasUML的配置和使用
erlang R17新socket选项{active,N}
UVA 10870
Copyright © 2011-2022 走看看