码迷,mamicode.com
首页 > 其他好文 > 详细

初识设计模式(六)

时间:2020-04-18 17:15:10      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:方法   ==   没有   ack   ati   需要   记录   开放   聚合   

??单例模式Singleton

官方:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

Singleton类有一个GetInstance()方法,允许客户访问它的唯一实例。多线程时使用双重锁定。

class Singleton{
private static Sinleton instance;
private static readonly object syncRoot = new object();
private Singleton(){

}
public static Singleton GetInstance(){
if(instance==null){
lock(syncRoot){
if(instance==null){
instance=new Singleton();
}
}
}
return instance;
}
}

私有的构造方法可以控制实例化,不能被new创建。

双重锁:n个线程,开始实例为null,都符合第一个if条件,第一个进入的线程对临界区资源加锁,创建完实例后,第二个线程还在,第二个判断的作用就是阻断已经进入的其他线程。

客户端调用的时候:Singleton s1 = Singleton.GetInstance();

??合成/聚合复用原则?

面向对象的六大原则之六。

官方:尽量使用合成/聚合,尽量不要使用类继承。

聚合表示的是一种弱的拥有关系,A包含B,B不是A的一部分,比如大雁和雁群。

合成表示的是一种强的拥有关系,A包含B,B是A的一部分,比如大雁和翅膀。

继承的话,子类与父类的耦合性太高,系统如果复杂的话,牵一发而动全身。

(好像忘记了,复习一下前几个原则:

1.开放-闭合原则:对扩展开放,对修改闭合,最好添加继承实现的子类,而不是更改类内容。

2.迪米特法则:两个类不直接通信,由第三者转发调用。

3.依赖倒转原则:不要依赖具体,要依赖抽象,也就是接口,即面向接口编程。

4.单一职责原则:一个类的职责不要太多,最好可以单一职责,松耦合。

5.里氏替换原则:子类实现父类功能,同时可以扩展功能,但不能修改父类。

设计模式处处围绕这些面向对象原则。

??桥接模式?

官方:将抽象部分与部分分离,使它们都可以独立地变化。

技术图片

如图所示,interface就是实现,shape就是抽象。circle可以与redcircle和greencircle建立联系。

??命令模式

官方:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

特点是有一个调用对象,请求以命令形式包裹在对象里,并传给调用对象,调用对象寻找可以处理该命令的receiver,由receiver执行命令。

敏捷开发原则告诉我们,不要为代码添加基于猜测的实际不需要的功能。在真正需要撤销/恢复时,再把原来的代码重构成命令模式就可。

??职责链模式

官方:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。

这不就是DNS 服务器的递归查询的一部分嘛,请求逐级上传,直到被处理或者最顶都没有处理。

这样处理的过程对用户是透明的,用户只需要向一个最低权限的对象传递请求,就会返回,但用户并不知道哪一个对象处理的请求。

初识设计模式(六)

标签:方法   ==   没有   ack   ati   需要   记录   开放   聚合   

原文地址:https://www.cnblogs.com/xiao-xiaozhi/p/12726804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!