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;
}
}
查看全文
相关阅读:
Flowable学习笔记(二、BPMN 2.0-基础 )
Flowable学习笔记(一、入门)
只有程序员才懂的幽默
Navicat自动备份数据库
两个原因导致Spring @Autowired注入的组件为空
设计模式—— 十二 :代理模式
设计模式—— 十 一:建造者模式
SpringBoot学习笔记(十一:使用MongoDB存储文件 )
Swagger API文档集中化注册管理
Spring Boot2从入门到实战:集成AOPLog来记录接口访问日志
原文地址:https://www.cnblogs.com/Linjianyu/p/1046875.html
最新文章
scala练习题1 基础知识
丰巢面试小结
monggodb学习系列:1,mongodb入门
关于团队3次内部沟通的思考
跨域的简单研究
阅读微信支付demo收获
python学习笔记1:python入门
php:ci学习笔记1
stm32寄存器版学习笔记02 串口通信
stm32寄存器版学习笔记01 GPIO口的配置(LED、按键)
热门文章
十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)
数据结构学习笔记07散列查找(哈希表)
10-排序5 PAT Judge
10-排序4 统计工龄
数据结构学习笔记06排序 (快速排序、表排序、基数排序)
STL之迭代器
09-排序3 Insertion or Heap Sort
09-排序2 Insert or Merge
Jackson用法详解
设计模式—— 十三 :原型模式
Copyright © 2011-2022 走看看