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;
}
}
查看全文
相关阅读:
android 进程/线程管理(一)----消息机制的框架
android的屏幕保持常亮
android network develop(3)----Xml Parser
android network develop(2)----network status check
android network develop(1)----doing network background
android 开发小记
转 Android中shape中的属性大全
转 Android学习 之 ColorStateList按钮文字变色
《大话设计模式》c++实现 建造者模式
《大话设计模式》c++实现 外观模式
原文地址:https://www.cnblogs.com/Linjianyu/p/1046875.html
最新文章
[内存管理]linux内存管理 之 内存节点和内存分区
Understanding a Kernel Oops!
linux性能分析及调优
Ext4中内存使用技巧的一点思考
[内存管理]linux X86_64处理器的内存布局图
进程间通信系列 之 共享内存简单实例
进程间通信系列 之 信号综合实例
进程间通信系列 之 信号(理论)
深入理解js闭包【写的通俗易懂,很值的阅读】
前端:let与var的区别
热门文章
Windows下的vue-devtools工具的安装
谷歌浏览器安装插件时出现:程序包无效:“CRX_HEADER_INVALID" 后的解决办法
Vue学习之旅:todomvc的学习练习
相对全面的前端知识点
windows安装npm教程
git Windows终端安装教程
Mac下安装nodejs,然后安装Vue-devtools工具
npm安装教程[转载的,版权归原作者]
android 进程/线程管理(三)----Thread,Looper / HandlerThread / IntentService
android 进程/线程管理(二)----关于线程的迷思
Copyright © 2011-2022 走看看