这本书读起来很有意思,插图很多,对话形式的内容,让人很有代入感。
2015-06-01
第1章 设计模式入门
主要通过一个鸭子的例子向读者说明了设计模式的思想,提到了三个设计原则。
- 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
- 针对接口编程,而不是针对实现编程
- 多用组合,少用继承(组合有更大的弹性,可以运行时动态改变行为)
第一个设计模式:策略模式定义了算法簇,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的用户。
2015-06-02 22:52:50
第2章 观察者模式
出版者(主题,subject)+订阅者(观察者,observer)=观察者模式
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。
又一个设计原则:为了交互对象之间的松耦合设计而努力
两种做法:推push信息模式(主题推送所有信息),拉pull模式(观察者主动获取自己需要的信息)
2015-06-05 14:42:10
第3章 装饰者模式
生活中的例子:咖啡店的咖啡,除了基本饮料,还会加入调料,这时候价格怎么计算?用继承会造成“类爆炸”,考虑新的设计模式。
装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的代替方案。
设计原则:类应该对扩展开放,对修改关闭。
装饰者与被装饰对象有相同超类型,装饰着可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到运行时动态扩展类行为。
第4章 工厂模式
披萨下单制作过程,下单是一个变化的部分,不变的是后期制作工序。将变化部分和不变部分分开。
工厂模式用来封装对象的创建,通过让子类决定该创建的对象是什么,来达到将对象创建过程封装的目的。
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类,
设计原则:要依赖抽象,不要依赖具体类(Dependency Inversion Principle,依赖倒置关系)
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
工厂模式与抽象工厂模式的区别:工厂模式通过子类继承,实现基类的工厂方法。抽象工厂模式提供一个抽象接口,通过对象的组合实现
(对工厂模式的理解还是不清楚,再看)
第5章 单件模式
Singleton Pattern确保一个类只有一个实例,并提供一个全局访问点。
经典的单件模式实现,在多线程环境下会出现问题,可以利用同步方法解决,但是效率低下。
改进方法:1)do nothing 如果对效率要求不高;2)立即创建实例,不用延迟实例化的做法;3)用双重检查加锁,在getInstance()中减少使用同步(其实只有在第一次创建实例是才加锁)