zoukankan      html  css  js  c++  java
  • 设计模式(结构型模式、行为型模式)

    一、结构型模式

    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.访问者模式
            对于相同的对象,不同的角色会有不同的操作,使得对象的操作变得灵活,新增一个访问者变得简单,但是增加新的具体元素会违反开闭原则,所以这个模式和抽象工厂模式一样,对开闭原则具有倾斜性。
             例子:网站的游客和管理员,有不同的权利和操作。
     
  • 相关阅读:
    mock.js
    v-bind和v-model的区别
    if语句中的return
    js中全局变量和局部变量以及变量声明提升
    js中全局和局部变量的区别
    相对路径、绝对路径
    commonJs
    B/S与C/S
    background-origin
    DOM
  • 原文地址:https://www.cnblogs.com/yanglang/p/12034027.html
Copyright © 2011-2022 走看看