设计模式(结构型模式、行为型模式)

一、结构型模式

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.访问者模式
        对于相同的对象,不同的角色会有不同的操作,使得对象的操作变得灵活,新增一个访问者变得简单,但是增加新的具体元素会违反开闭原则,所以这个模式和抽象工厂模式一样,对开闭原则具有倾斜性。
         例子:网站的游客和管理员,有不同的权利和操作。
 
原文地址:https://www.cnblogs.com/yanglang/p/12034027.html