4-10 设计模式DP
一、六大设计原则
1.开闭原则:Open Closed Principle, OCP
对扩展开放,对修改关闭
简单来说,一个软件实体应通过扩展来实现其变化,而不是通过修改来实现其变化
比如下面的代码入如果70以上的书籍9折销售,70之下的书籍8折销售,如何利用开闭原则实现其变化
为了不修改源数据,我们新建一个NovelBook的子类对getPrice进行覆盖即可
2.单一职责原则:Single responsibility principle,SRP
3.里氏替换原则:Liskov Substitution Principle,LSP
简单理解成子类可以替换父类
如果是参数,要求子类比父类的条件更宽
如果是返回值,要求子类比父类的条件更严
4.依赖倒置原则:Dependence Inversion Principle, DIP
核心思想:要面向接口编程、不要面向实现编程
5.接口隔离原则:Interface Segregation Principle: ISP
6.迪米特法则:Law of Demeter, Lod
其实就是在讲如何减少类之间的耦合 ,利用中间类打交道
二、设计模式总览
三、创建型设计模式
1.单例模式
类名.getInstance()始终获取的是同一个对象
懒汉式的单例
饿汉式的单例,线程安全
主要区别在于第一行
2.工厂方法模式
能让实例化推迟到子类,其实就是定义一个接口,由子类决定要实例化的类是哪一个
3.抽象工厂模式
所谓抽象工厂模式就是她提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。
4.构建者模式
对于建造者模式而已,它主要是将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。
5.原型模式
原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
四、结构型模式
1.适配器模式
所谓适配器模式就是将一个类的接口,转换成客户期望的另一个接口。它可以让原本两个不兼容的接口能够无缝完成对接。
2.桥接模式
桥接模式就是讲抽象部分和实现部分隔离开来,使得他们能够独立变化。
3.组合模式
组合模式组合多个对象形成树形结构以表示“整体-部分”的结构层次。它定义了如何将容器对象和叶子对象进行递归组合,使得客户在使用的过程中无须进行区分,可以对他们进行一致的处理。
4.装饰者模式
装饰者模式,动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。
5.外观模式
外观模式提供了一个统一的接口,用来访问子系统中的一群接口。
6.亨元模式
享元模式就是运行共享技术有效地支持大量细粒度对象的复用。
7、代理模式(Proxy)
代理模式就是给一个对象提供一个代理,并由代理对象控制对原对象的引用。
Subject: 抽象角色。声明真实对象和代理对象的共同接口。
Proxy: 代理角色
RealSubject: 真实角色。
五、行为型模型
1、职责链模式
它将对象组成一条链,发送者将请求发给链的第一个接收者,并且沿着这条链传递,直到有一个对象来处理它或者直到最后也没有对象处理而留在链末尾端。
2、命令模式
命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。同时命令模式支持可撤销的操作。
3、解释器模式
解释器模式就是定义语言的文法,并且建立一个解释器来解释该语言中的句子。
4、迭代器模式
所谓迭代器模式就是提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。
5、中介者模式
所谓中介者模式就是用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
6、备忘录模式
所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
7、观察者模式
观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新。
8、状态模式
状态模式就是允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
9、策略模式
策略模式就是定义了算法族,分别封装起来,让他们之前可以互相转换,此模式然该算法的变化独立于使用算法的客户。
10、模板方法模式
模板方法模式就是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
11、访问者模式
访问者模式即表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。