HeadFirst设计模式
2018-03-08 10:37:26 51 举报
AI智能生成
《HeadFirst设计模式》脑图
作者其他创作
大纲/内容
9 迭代器(Iterator) &
组合模式(Composite)
组合模式(Composite)
10 状态模式
11 代理模式(Proxy)
12 复合模式
13 与设计模式相处
模式
在某情境(context)下,针对某问题的某种解决方案。
情境:应用某个模式的情况。
问题:你想在某情境下达到的目标。
解决方案:一个通用的设计,用来解决约束、达到目标。
模式分类
分类一
创建型
Singleton
Factory Method
Abstract Factory
Builder
Prototype
行为型
Template Method
Iterator
Command
Observer
State
Strategy
Mediator
Visitor
Memento
Interpreter
Chain of Responsibility
结构型
Decorator
Composite
Proxy
Facade
Adapter
Bridge
Flyweight
分类二
类
Template Method/Adapter/Factory Method/Interpreter
对象
Composite/Decorator/Proxy/Strategy/Bridge/Flyweight/Abstract Factory/Singleton/Builder/Prototype
/State/Mediator/Chain of Responsibility/Observer/Facade/Command/Iterator/Visitor/Memento
/State/Mediator/Chain of Responsibility/Observer/Facade/Command/Iterator/Visitor/Memento
警告
过度使用设计模式可能导致代码被过度工程化。
应该总是用最简单的解决方案完成工作,并在真正需要模式的地方才使用它。
应该总是用最简单的解决方案完成工作,并在真正需要模式的地方才使用它。
四人组
Erich Gamma / RichardHelm / Ralph Johnson / John Vlissides
反模式
告诉你如何采用一个不好的解决方案解决一个问题。
附录A.1 桥接模式(Bridge)
使用桥接模式不只改变你的实现,也改变你的抽象。
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
附录A.2 生成器模式(Builder Pattern)
使用生成器模式封装一个产品的构造过程,并允许按步骤构造。
1 设计模式入门
OO基础
抽象、封装、多态、继承
OO特性
可复用、可扩充、可维护
设计原则
封装变化
找出应用中可能需要改变之处,把它们独立出来,不要和那些不需要改变的代码混在一起。
1、把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要改变的其他部分。
2、系统中的某部分改变不会影响其他部分。
针对接口编程,而不是针对实现编程。
多用组合,少用继承。
设计模式
策略模式(Strategy)
定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
类图
ProcessOn地址
Other
鸭子模型演化
has a/is a的区别
共享词汇
补充:如何绘制类图
2 观察者模式(Observer)
定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
为了交互对象之间的松耦合设计而努力。
类图
ProcessOn地址
松耦合
当两个对象之间松耦合,它们依然可以交互,但是不太清楚彼此的细节。
松耦合的设计之所以让我们建立有弹性的OO系统,能够应对变化,是因为对象之间的相互依赖降低到了最低。
java.util.Observable
About
有多个观察者时,不可以依赖特定的通知次序
观察者模式,默认方式是 被观察者 推送数据;其实也可以 观察者 拉数据。
3 装饰者模式(Decorator)
动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
开闭原则:类应该对扩展开放,对修改关闭。
类图
ProcessOn地址
java.io
About
该模式中 装饰者 和 被装饰者 都继承自同一父类,这里继承的目的是为了达到“类型匹配”,而不是为了获得父类“行为”。
组合和委托可用于在运行时动态地加上新的行为。
装饰者可以在被装饰者的行为前面 与/或 后面加上自己的行为,甚至将被装饰者的行为整个取代掉,而达到特定的目的。
装饰者会导致设计中出现许多小对象,如果过度使用,会让程序变得很复杂。
4 工厂模式(Factory)
简单工厂(Simple Factory)
这其实是一种编程习惯而非设计模式:将实例化哪一个类的操作移到单独的一个类中,形成工厂和客户的关系。
类图
ProcessOn地址
工厂方法模式(Factory Method)
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
抽象工厂模式(Abstract Factory)
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
类图
ProcessOn地址
工厂方法&抽象工厂
工厂方法
使用继承,把对象的创建委托给子类,子类实现工厂方法来创建对象。
允许类将实例化延迟到子类进行。
抽象工厂
使用对象组合,对象的创建被实现在工厂接口所暴露出来的方法中。
创建相关的对象家族,而不需要依赖他们的具体类。
依赖倒置原则:要依赖抽象,不要依赖具体类。
变量不可以持有具体类的引用。
如果使用new,就会持有具体类的引用。你可以改用工厂来避开这样的做法。
不要让类派生自具体类。
如果派生自具体类,你就会依赖具体类。请派生自一个抽象(接口或抽象类)。
不要覆盖基类中已实现的方法。
如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的抽象。基类中已实现的方法,应该由所有的子类共享。
About
所有的工厂都是用来封装对象的创建。
所有工厂模式都通过减少应用程序和具体类直接的依赖促进松耦合。
5 单件模式(Singleton)
用来创建独一无二的,只能有一个实例的对象。
确保一个雷只有一个实例,并提供全局访问点
5种单件模式的写法
About
确定在性能和资源上的限制,然后笑笑地选择适当的方案来实现单击,以解决多线程的问题。
如果使用多个类加载器,可能导致单间失效而产生多个实例。
6 命令模式(Command)
将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
About
命令模式将发出请求的对象和执行请求的对象解耦。
在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接手这和一个或一组动作。
命令可以支持撤销,做法是实现一个 undo() 方法来回被执行前的状态。
宏命令是命令的一种简单的延伸,允许调用多个命令。
7 适配器(Adapter) &
外观模式(Facade)
外观模式(Facade)
适配器模式
将一个类的接口,转换成客户期望的另一个接口。适配器让原本的接口不兼容的类可以合作无间。
外观模式
提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
最少知识原则:只和你的密友谈话。
About
适配器将一个对象包装起来以改变其接口;
装饰者将一个对象包装起来以增加新的行为和责任;
外观将一群对象“包装”起来以简化其接口。
装饰者将一个对象包装起来以增加新的行为和责任;
外观将一群对象“包装”起来以简化其接口。
外观不只是简化接口,也将客户从组建的子系统中解耦。
外观和适配器可以包装许多类,但是外观的意图是简化接口,而适配器的意图是将接口转换成不同接口。
8 模板方法模式(Template Method )
0 条评论
下一页