大话设计模式笔记

本文深入探讨了多种设计模式,包括策略模式、工厂模式、装饰模式等,并对比了它们之间的区别和适用场景。还介绍了备忘录模式、组合模式等高级模式的原理与应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从代码看,策略模式比工厂模式多了一个调用子类行为的方法。个人认为调用子类行为的代码放在客户端是工厂模式,放在工厂里是策略模式。策略模式体现的是对相同行为的一个封装,返回给客户端的是一个结果,耦合性更低。工厂模式返回给客户端的是一个对象,调用什么行为有客户端决定。个人认为对象行为比较复杂时使用工厂模式,行为较简单时使用策略模式。

 抽象工厂模式与简单工厂模式相比,其优点就是更符合开放封闭原则,缺点是需要在客户端做判断

 

装饰模式是通过在父类中封装一个父类的对象,在子类方法中通过base.method的调用来动态扩展子类的行为,比把所有行为写在父类中更灵活,这样可以做到只有某个对象确实需要某种行为时才对它进行扩展。

 

代理模式有一个接口,真实对象与代理对象实现该接口,代理对象负责对真实对象行为的调用。webService、对对象访问权限的控制都是代理模式的应用。

 

原型模式,一个原型接口有一个clone方法,具体原型类实现这个接口。.net System命名空间提供了ICloneable接口,有一个唯一的方法Clone(),只要实现这个接口就可以完成原型模式了。一般在初始化的信息不发生变化的情况下,克隆是最好的办法,这既隐藏了对象的创建细节,又对性能是大大的提高。object类的MemberWiseClone()方法只复制类所包含的值类型和string类型,其他的引用类型复制的是引用。 要想实现深复制,可以让类包含的其他引用类型(除了值类型和stirng类型外)也实现ICloneable接口,同时让类包含一个私有构造方法,调用需要深复制的对象的Clone()方法,该类同时也实现ICloneable接口并在Clone方法中调用私有构造方法。

 

模板方法模式,一个抽象类有一些子类共有的抽象方法和一个调用共同行为的实例方法(即模板方法)。模板方法封装的是子类共有行为的一个调用。

 

外观模式,对许多对象不同方法调用的封装,一个类包含其他类的引用,并负责调用这些类中的方法。客户端调用时只需要认识一个类就行了,降低了耦合性。

 

建造者模式与模板方法模式,建造者模式比模板方法模式多了一个指挥者,具体建造者里面多了一个产品对象的引用;模板方法模式没有指挥者,在抽象类里有一个模板方法。模板方法模式侧重于对算法的封装,建造者模式侧重于返回一个product,二者都要求有一个较稳定的是顺序。

 

观察者模式,一个通知者,多个观察者,通知者有添加、移除观察者的方法还有一个通知观察者的方法,通知者需要知道通知的对象,观察者需要知道通知者的状态。

 

工厂方法模式与抽象工厂模式,工厂方法模式是对创建产品能力的一个抽象,是对简单工厂模式的一个抽象;抽象工厂模式有多个创建不同抽象产品的方法,工厂方法模式只有一个创建一种抽象产品的方法。(http://wenku.baidu.com/linkdtyauzyvdinwYdgA3TsqFAeEZt9pHamAwMe8ipEiebo__5JXOlrYCVbQJM3uTyONLMy5uHKH0ZWO3gLq5WB6uOF3Onklq5KFhCxMzhG)

 

备忘录模式,一个发起人,一个备忘录,一个管理者,发起人可以向备忘录存储,通过管理者从备忘录中恢复状态。它把自身的状态存储在另外一个对象中

 

组合模式,需求中体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,考虑使用组合模式。treeview就是组合模式的典型应用。

 

迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴漏集合的内部结构。

 

单例模式,类只可以有一个实例,类有一个自身的静态字段,构造函数是私有的,有一个静态公共方法返回该类的唯一实例。

多线程时的单例模式

C#中单例模式的实现方式

 

合成聚合复用原则,聚合表示一种弱的拥有关系体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

 

中介者模式,中介者需要认识所有其他对象,所有对象都需要认识中介者。中介者模式模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值