读《大话设计模式》笔记

736 阅读7分钟

设计模式原则

        ——单一责任(SRP)
        ——开放、封闭(OCP 开闭原则)
        ——依赖倒转 (面向接口编程 || 抽象类)
                高层模块不应该依赖底层模块,两个都应依赖抽象
        ——里氏代换(子类可以完全替代父类)
                所以需要使用实现接口的方式才能实现里氏代换原则
        ——迪米特法则(LoD)
                松耦合,不需要给外界知道的字段或方法就保护起来

面向对象——封装、继承、多态

特点:

        可复用复用、灵活配置、可维护、可扩展
名词:强内聚,松耦合
准则:
        1.灵活性——web与服务分离 (降低耦合)
        2.复用——公共代码抽取
        3.扩展——继承父类 || 面向接口编程(降低耦合)
        4.如果出现了多个可复用的类,则可以使用简单工厂模式来构造出对应的实例,并用多态  的方法接收实例。
        5.遵循开闭原则
        6.不是说所有的都需要使用OOP,对那些变化多,重复代码多的进行OOP处理最好

工厂模式

特点:
        构造实例的生产者,简单工厂模式违背了开闭原则,内部存在业务逻辑,当新增功能时,需要修改工厂类的逻辑!
类别:
        1.简单工厂模式(结合OOP思想,提高代码的可维护性)
步骤:
        1.创建工厂类,提供创建实例的方法,返回值为实例父类,方法内new 对象。

策略模式

特点:
        算法本身就是一种策略,封装了变化,算法
步骤:
        1.创建具有公共方法的父抽象类,定义抽象方法
        2.封装算法类继承抽象父类,实现抽象方法(里面包含具体算法步骤)
        3.创建Context上下文类,包含抽象父类作为成员变量,抽象父类作为参数的构造方法,  成员方法内调用构造实例重写后的抽象方法。

装饰模式

特点:
        修饰了具体的方法,可以讲核心内容与装饰内容分离出来,而分离出来的装饰类又是独立且互不影响的存在
步骤:
        1.先拥有实体父类,父类中包含需要装饰的方法
        2.创建装饰类,继承父类,父类作为成员变量,设置set方法,重写装饰方法,调用父类中的方法
        3.构建具体装饰类,继承装饰类,重写装饰方法先调用父类的方法(super,xxx())再写入自己的装饰代码

代理模式

特点:
        代理对象代表真实对象,拥有真实对象需要被代理的方法功能,同时也能做一些真实对象以外的其他处理。
步骤:
        1.创建接口,提取代理方法
        2.真实对象实现该接口方法,并将目标对象作为成员变量,且提供对应构造方法
        3.代理对象实现接口方法,并将被代理对象作为成员变量,且提供以目标对象为参数的实例化被代理对象的构造方法。
用途:
        1.远程代理,为一个对象在不同的地址空间提供局部代理,隐藏在不同地址空间的事实
        2.虚拟代理,浏览器加载图片与文字分离开
        3.安全代理,控制真实对象的访问权限
        4.智能指引,当调用真实对象时,代理处理另外一些事

工厂方法模式

特点:
        坚守住开闭原则,可扩展不可修改,与简单工厂模式对比,简单工厂模式违背了开闭原则,内部存在业务逻辑,当新增功能时,需要修改工厂类的逻辑!
步骤:
        1.构建工厂接口
        2.工厂接口声明返回父类的创建实例的方法
        3.实体类继承工厂接口,重写接口方法,返回对应对象

原型模式

特点:
        分为浅复制和深复制
            1.浅复制只能复制对象结构
            2.深复制把引用对象的变量指向复制过来的新对象,而不是原有的被引用对象应用——clone(浅复制) 和 copy(深复制)  

模板方法模式

特点:
        定义一个操作中的算法骨架,而一些步骤延迟到子类中,模板方法可似的子类在不改变父类算法结构即可重定义该算法的某些特定步骤
        简言之,模板方法把不变的方法提取到超类,去除子类重复代码,将可变的行为提供重写方法,子类修改可变的重写方法即可重定义该方法。

外观模式

特点:
        完美的体现了依赖倒转和迪米特法则,非常常用的设计模式之一
        三层分离架构便是这种模式的精髓所在
            1.层与层之间建立Facade类,暴露简单的接口供给上一层使用,让Facade去处理交互下一 层
            2.开发阶段,子系统会衍生出很多很多的小类,增加外观Facade类可以提供一个简单接口,减少他们之间的依赖
            3.维护遗留的大型系统时,往往很难再进行扩展,这时将新功能开发一个外观Facade类来提供比较清晰的接口,让新功能和Facade交互,Facade与遗留的大型系统交互复杂的工作

建造者模式

特点:
        使用建造者模式客户端不必知道产品内部细节,建造者独立,容易扩展
        会产生多余的Builder对象以及Director对象,消耗内存。
步骤:
        1.构建产品类,提供字段与set方法
        2.静态内部类——产品构建者new一个产品类,内部实现构建细节,最后给一个create方  法返回产品类。

观察者模式

特点:
        定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生改变时,会通知所有观察者对象,使他们能自动更新自己。
步骤:
        1.主题对象Subject接口拥有add(申请订阅)、delete(取消订阅)、notify(广播通知)三个基本功能
        2.主题实现类对观察者进行记录,并实现各方法
        3.观察者对象Observer接口拥有update(自动更新)功能
        4.观察者实现类接收Subject的具体变化

抽象工厂模式

状态模式

适配器模式

备忘录模式

组合模式

迭代器模式

单例模式

桥接模式

命令模式

职责链模式

中介者模式

享元模式

解释器模式

访问者模式