厌倦了零零散散的文章分布,书评写到豆瓣、技术写到网易什么的,这样自己很容易遗忘,懒得去回顾,慢慢得就懒得去思考和动笔了,所以我决定在此再加一个书评分类,以后看了书往这里写总结,虽然这个分类开得有点晚了,不过我觉得还是有用的,对将来的回顾知识点并且能对自己掌握的知识能有直观的了解。大数据能比自己更了解自己,那我觉得笔记也应该能让自己更清楚自己。
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、迭代器模式
分离了集合对象的遍历行为,抽象出一个迭代器来负责,可以让外部代码访问内部对象但又不暴露内部结构。
还有些东西需要再思考一下。