一、结构型模式1 适配器模式 通过一个具体类把适配者适配到目标接口中,使得原本不兼容的那些类可以一起工作。 举个例子:可以把二分查找和快排(适配者)
一、结构型模式
1.适配器模式
通过一个具体类把适配者适配到目标接口中,使得原本不兼容的那些类可以一起工作。
举个例子:可以把二分查找和快排(适配者)封装到一个DataOperation(目标接口)接口中,再操作Adapter(适配器)来进行操作。【Adapter(QuickSort sortobj,BinarySearch searchobj)】
2.桥接模式
将抽象部分跟实现部分分离,实现在不修改源码的基础上更换类,使他们都可以独自变化来满足开闭原则。
3.组合模式
将对象组织到树形结构中,可以用来描述整体和部分的关系。
例:一个杀毒软件的组成。
一步一步的实现叶子构件来完成杀毒软件
4.装饰模式
在不影响其他对象的情况下,以动态透明的方式给每个对象添加职责。
例:创建一个单纯的窗体——>给窗体加滚动条——>把窗体变成透明窗体。
5.外观模式
子系统中的一组接口提供一个一致的界面并定义一个接口,这个接口使得子系统更为容易的使用。
实现了子系统和用户之间的松耦合~
6.享元模式
如其名字:共同的分享某些单元。通过共享技术有效支持大量小对象的复用,是系统只使用少量的对象。
例:五子棋。总不可以一个棋给一个小对象吧,是系统中只存在一个白/黑棋对象,在不同的地方显示即可。
7.代理模式
客户端不能直接引用一个对象,代理在其之间起到中介作用。
例子:写二叉树的时候外面不能直接访问根节点,所以通过一个接口连向一个私有函数来访问实现想要的功能。
再比如:VPN
二、行为型模式
1.职责链模式
为隔离发送者和接收者,让多个对象都有可能接受请求,将这些对象连成一个链,并沿着这个链传送请求,直到有对象处理它为止。
例:查找文档系统。
注:不保证每个请求都会被处理,对于比较长的职责链请求可能涉及多个处理对象,系统性能可能会受到影响,而且调试时也不太方便。
2. 命令模式
请求者不必知道接受者是谁,降低耦合。就像去餐厅吃饭,点完餐并不知道是哪个厨师给你做的,这样使一个新的命令很容易加到系统里,带来很大的灵活性 。
3.解释器模式
定义一个语言的文法,并建立一个解释器来解释该语言中的句子
例:机器人设定的up,down,left,right.
4.迭代器模式
不暴露内部数据而遍历他。
用得太多了,STL里的iterator
5.中介者模式
用一个中介来隔离你和接收者。就像上面那个例子,你和厨师被服务员隔开,降低耦合。
6.备忘录模式
在不破坏封装的前提下,捕获一个对象的内部状态并在该对象之外保存,等对象变动时,可以随时使对象恢复到以前的样子。前提内存要够。
例:游戏里挂之后点复活等一会儿复活成挂之前的状态。
7.观察者模式
定义对象之间一对多的依赖关系,一个对象变更时,其他对象皆自动更新。
例:有人评论了你的微博,你的各个通知栏都有提示。
8.状态模式
允许一个对象在其内部状态改变时改变他的行为。
例:查银行存款,很多时数字是绿色,小于1000时是黄色,欠费是是红色。
9.策略模式
将算法封装到类里,在使用时,客户端自行选择需要的算法,像STL里封装的sort,find等。
10.模板方法模式
c++里的template,用的太多。
11.访问者模式
对于相同的对象,不同的角色会有不同的操作,使得对象的操作变得灵活,新增一个访问者变得简单,但是增加新的具体元素会违反开闭原则,所以这个模式和抽象工厂模式一样,对开闭原则具有倾斜性。
例子:网站的游客和管理员,有不同的权利和操作。
1.适配器模式
通过一个具体类把适配者适配到目标接口中,使得原本不兼容的那些类可以一起工作。
举个例子:可以把二分查找和快排(适配者)封装到一个DataOperation(目标接口)接口中,再操作Adapter(适配器)来进行操作。【Adapter(QuickSort sortobj,BinarySearch searchobj)】
2.桥接模式
将抽象部分跟实现部分分离,实现在不修改源码的基础上更换类,使他们都可以独自变化来满足开闭原则。
3.组合模式
将对象组织到树形结构中,可以用来描述整体和部分的关系。
例:一个杀毒软件的组成。
一步一步的实现叶子构件来完成杀毒软件
4.装饰模式
在不影响其他对象的情况下,以动态透明的方式给每个对象添加职责。
例:创建一个单纯的窗体——>给窗体加滚动条——>把窗体变成透明窗体。
5.外观模式
子系统中的一组接口提供一个一致的界面并定义一个接口,这个接口使得子系统更为容易的使用。
实现了子系统和用户之间的松耦合~
6.享元模式
如其名字:共同的分享某些单元。通过共享技术有效支持大量小对象的复用,是系统只使用少量的对象。
例:五子棋。总不可以一个棋给一个小对象吧,是系统中只存在一个白/黑棋对象,在不同的地方显示即可。
7.代理模式
客户端不能直接引用一个对象,代理在其之间起到中介作用。
例子:写二叉树的时候外面不能直接访问根节点,所以通过一个接口连向一个私有函数来访问实现想要的功能。
再比如:VPN
二、行为型模式
1.职责链模式
为隔离发送者和接收者,让多个对象都有可能接受请求,将这些对象连成一个链,并沿着这个链传送请求,直到有对象处理它为止。
例:查找文档系统。
注:不保证每个请求都会被处理,对于比较长的职责链请求可能涉及多个处理对象,系统性能可能会受到影响,而且调试时也不太方便。
2. 命令模式
请求者不必知道接受者是谁,降低耦合。就像去餐厅吃饭,点完餐并不知道是哪个厨师给你做的,这样使一个新的命令很容易加到系统里,带来很大的灵活性 。
3.解释器模式
定义一个语言的文法,并建立一个解释器来解释该语言中的句子
例:机器人设定的up,down,left,right.
4.迭代器模式
不暴露内部数据而遍历他。
用得太多了,STL里的iterator
5.中介者模式
用一个中介来隔离你和接收者。就像上面那个例子,你和厨师被服务员隔开,降低耦合。
6.备忘录模式
在不破坏封装的前提下,捕获一个对象的内部状态并在该对象之外保存,等对象变动时,可以随时使对象恢复到以前的样子。前提内存要够。
例:游戏里挂之后点复活等一会儿复活成挂之前的状态。
7.观察者模式
定义对象之间一对多的依赖关系,一个对象变更时,其他对象皆自动更新。
例:有人评论了你的微博,你的各个通知栏都有提示。
8.状态模式
允许一个对象在其内部状态改变时改变他的行为。
例:查银行存款,很多时数字是绿色,小于1000时是黄色,欠费是是红色。
9.策略模式
将算法封装到类里,在使用时,客户端自行选择需要的算法,像STL里封装的sort,find等。
10.模板方法模式
c++里的template,用的太多。
11.访问者模式
对于相同的对象,不同的角色会有不同的操作,使得对象的操作变得灵活,新增一个访问者变得简单,但是增加新的具体元素会违反开闭原则,所以这个模式和抽象工厂模式一样,对开闭原则具有倾斜性。
例子:网站的游客和管理员,有不同的权利和操作。