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;
}
}
查看全文
相关阅读:
【ST开发板评测】Nucleo-F411RE开箱报告
手把手教你制作Jlink-OB调试器(含原理图、PCB、外壳、固件)
国产处理器的逆袭机会——RISC-V
基于uFUN开发板和扩展板的联网校准时钟
基于uFUN开发板的RGB调色板
理解ffmpeg中的pts,dts,time_base
如何终止线程的运行(C/C++)
关于阻塞和非阻塞,同步和异步的总结
QT移植无法启动 This application failed to start because it could not find or load the QT platform
Qt5学习记录:QString与int值互相转换
原文地址:https://www.cnblogs.com/Linjianyu/p/1046875.html
最新文章
20165313 《Java程序设计》第六周学习总结
实验一 Java开发环境的熟悉
20165313 《Java程序设计》第五周学习总结
20165313 《Java程序设计》第四周学习总结
20165313 《Java程序设计》第三周学习总结
20165313 《Java程序设计》第二周学习总结
记一次Pr字幕模糊问题及解决方法
某邀请赛misc key家用完整版
简单认识RTLO(Right-to-Left Override)
胶片效果转场
热门文章
博客园添加背景图片
静态分析基础技术
某邀请赛misc key阉割发行版
Honk's pool[STL multiset]
so easy
【ST开发板评测】使用Python来开发STM32F411
手把手教你搭建织女星开发板RISC-V开发环境
织女星开发板启动模式修改——从ARM M4核启动
织女星开发板调试器升级为Jlink固件
NXP恩智浦VEGA织女星开发板免费申请!
Copyright © 2011-2022 走看看