设计模式二(c#语言)

设计模式二(C#语言)

《大话设计模式》阅读笔记。

6、 装饰模式

和建造者模式不同,建造者模式的建造过程相对稳定。
装饰模式,需要把所需的功能按正确的顺序串联起来进行控制。动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
不用关心对象的生成,只关心添加的功能。把要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。
把类中的装饰功能从类中去除可以简化原始的类设计。---把核心职责和装饰功能区分开。可以去除相关类中重复的装饰逻辑。
最理想的情况是装饰类之间彼此独立这样可以按任意顺序装饰,否则需要关注顺序。


7、代理模式

为其他对象提供一种代理,以实现对这个对象的访问。
真实实体和代理类都继承自抽象的接口类,这样实体需要的抽象接口都能用代理对象来代替。
场景:远程代理、虚拟代理(存放实例化需要很长时间的实体)、安全代理(用来控制真实对象的访问权限)、智能指针(代理处理了另外的一些事,内存的是否释放)


8、工厂方法模式

先建一个工厂接口,加减乘除各建一个工厂去实现这个接口。
操作符实例放在工厂里,工厂里包含了逻辑判断,动态的实例化相关的类-----简单工厂模式。
简单工厂添加操作符时修改了工厂添加了case分支,所以对修改开放了。工厂模式就不会
工厂模式比简单工厂模式又多了一层抽象,雷锋接口类--雷锋工厂。继承出了学雷锋的大学生工厂、学雷锋的社区志愿者工厂。不是单层的工厂是简单工厂的进一步抽象和推广,单层的工厂对修改没有关闭。这样来说抽象层越多,越符合开-闭原则?


9、原型模式

手写简历。
20次实例化。C#中的克隆方法,ICloneable接口:初始化信息不发生变化的情况下,克隆就是最好的方法。既隐藏了对象创建的细节又对性能有了提高(不用new多个对象)。
c#中的MemberwiseClone()方法是值类型的逐位复制,引用类型的复制引用不复制引用中的对象(浅表复制)。深复制应该深入多少层?还有循环引用的问题?
原型模式就是深、浅复制?


10、模板方法模式

泛化,抽象父类然后继承只是初步的泛化,多个继承类中的代码也是类似的。所有重复的东西都上升到父类去不让子类重复。重复=易错+难改。
模板方法模式,定义操作中的算法骨架,而将一些步骤延迟到子类中。模板方法可以不改变算法结构就重定义其中某些步骤。

posted @ 2021-04-12 15:55  wuya178  阅读(56)  评论(0)    收藏  举报