《大话设计模式》的一些总结

厌倦了零零散散的文章分布,书评写到豆瓣、技术写到网易什么的,这样自己很容易遗忘,懒得去回顾,慢慢得就懒得去思考和动笔了,所以我决定在此再加一个书评分类,以后看了书往这里写总结,虽然这个分类开得有点晚了,不过我觉得还是有用的,对将来的回顾知识点并且能对自己掌握的知识能有直观的了解。大数据能比自己更了解自己,那我觉得笔记也应该能让自己更清楚自己。

OK,不再废话。这本书其实早就看过了,可是一直看得漫不尽心,为了加深对面向对象思想的理解,提高自己编写代码的质量,我花了大概一周的时间下了本电子书将其看完,提高还是有一点的,我在下面就将各模式进行一个自我描述式的总结,自己的理解,欢迎指正。

一、创建型模式

最终都落实到客户端的创建对象问题。

1、简单工厂模式

根据需求,创建对应的实例,例如男人和女人两类,那么工厂就是根据传入的参数创建真正的男人或女人。

如:factory.create("男");

2、抽象工厂

抽象的工厂,也就是并非真实的工厂(只是一个接口),大家根据这个抽象工厂模板(拥有工厂所需要做的方法)能打造出自己的工厂,并通过自己的工厂产生对应实例。

3、建造者模式

将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。

4、工厂方法

让子类决定实例化哪一个类。

5、原型方法

通过拷贝原型创建新的对象。这里就涉及到深浅拷贝。深拷贝,内部引用会分配新的空间,浅拷贝内部引用的东西还是指向原来的。

6、单例模式

保证一个类只有一个实例,并提供访问他的一个全局访问点。

二、结构型模式

为了使得耦合度更低,之间的关联更少,增加需求时更加合理。

1、适配器模式

他能将一个类的接口转换成客户端希望的另一种接口,使得接口不兼容的那些类可以一起工作。

例如:ADO.NET在操作数据时,为了保证拿到的时候数据格式相同,用了DataAdapter将无论是Mysql或Sqlserver等的数据都fill到DataSet去。

2、桥接模式

合成聚合复用原则的一个体现。例如手机品牌和手机软件,每个品牌有多个手机软件,但软件就不分品牌。把他们分开,发挥自己的功能,不要使用继承。

3、组合模式

要使用整体与部分关系的时候,或者树形结构的使用该模式,例如一个部门的管理。

4、装饰模式

可以在客户端给对象动态的添加功能。就像穿衣服一样,可以一件件的往上加。

5、外观模式

为子系统的接口提供一个一致的界面。这是一个顶层的接口,若要跟新系统交互,就可以通过这个接口。

6、享元模式(flyweight)

为了共享一些实例,例如围棋就黑白两种,每个棋子都创建对象太费空间,他就能利用模式优势共享一些共同属性。

7、代理模式

为其他对象提供一个代理从而控制对象的访问。与外观模式的是,他只代理其中一个对象,而不是一个系统,所以他也没有那么的复杂。

三、行为型模式

1、观察者模式

观察者本身是一个类,但他只要实例一个就能接别人各种类对象的活(一对多),例如让他监听某个对象的变化,一旦变化,让他干活的人都会接到通知。

例如:在C#中就是委托和事件,一个委托可以做别人交给他的任何事情,也就是别的对象使用的方法交给他就能执行了。

2、模板方法

定义算法骨架,由子类去完善或更改他的细节。

例子:选择题的题目都相同,答题者只是答案不同,所以给个answer()接口,子类去实现就行了。

3、命令模式

将一个请求封装为一个对象,从而可以对不同请求进行参数化。支持撤销。

4、状态模式

5、职责链模式

将对象串成一个链,一直传递到能处理该事件的人。

例如:作用在于传递,申请加薪,经理没权利就给总监,总监也没权利,那就给总经理。

 6、解释器模式

7、访问者模式

将算法与数据结构分开,这样系统有稳定的框架,并能改变和增加算法。

8、中介者模式

有点类似于群发的意思。

9、策略模式

将算法分别封装起来,并集成来自一个叫策略的类,那么算法就独立于客户端了,只要操作策略类即可了。

10、备忘录模式

可以不暴露细节。以游戏举例,当要保存存档时,就是说即便你不知道要保存的是生命力,攻击力,防御力,只要保存就都能保存上了。读取时直接就读出来。

11、迭代器模式

分离了集合对象的遍历行为,抽象出一个迭代器来负责,可以让外部代码访问内部对象但又不暴露内部结构。

还有些东西需要再思考一下。

原文地址:https://www.cnblogs.com/fafaly/p/3931610.html