最近在看设计模式相关的知识,在此记录并分享之。编程
设计模式总共23种。有六大原则和三种类型。
六大原则
1.单一职责原则---Single Responsibility Principle设计模式
定义: 就一个类而言,应该仅有一个引发它变化的缘由。 说明: 若是一个类承担的职责过多,就等于把这些职责耦合在一块儿。当业务愈来愈复杂时,改动一个地方就会引发整个函数的大改动。别人看你的代码也会理解起来很费解。当你把每个函数的功能拆分的很是细致的话,后期维护修改或者他们阅读你的代码都会很轻松。 2.里式替换原则---LiskovSubstitution Principle 定义: 子类型必须可以替换掉他们的父类型。 说明: 若是把一个父类对象替换成一个子类对象,程序行为彻底没有变化,只有这样,父类才能真正被复用,子类可以在父类的基础上增长新的行为。 里式替换原则是对开-闭原则的补充 3.依赖倒置原则---DependenceInversion Principle 定义: A.高层模块不该该依赖低层模块。两个都应该依赖抽象; B.抽象不该该依赖细节,细节应该依赖抽象;(针对接口编程,而不是针对实现) 说明 抛弃面向过程开发,减小各个模块的耦合性,提升复用性 4.合成聚合原则---Composite/Aggregate Reuse Principle 定义: 尽可能使用合成/聚合,尽可能不要使用类继承 说明 若是子类和父类有较强的耦合依赖关系,则父类的任何改变都会致使子类发生改变。复用子类时有需求而必须改变父类才能实现,这种状况应当避免。 5.迪米特法则---Law Of Demeter 定义: 若是两个类没必要彼此直接通讯,那么这两个类就不该当发生直接的相互做用,若是其中一个类须要调用另外一个类的某一个方法的话,能够经过第三者转发这个调用; 说明 类之间的设计要松耦合,耦合性越低,复用性越高。 6.开放-封闭原则---Open Closed Principle 定义: 软件实体(类,模块,函数等等)应该能够扩展,可是不能够修改; 说明 对扩展开放,意味着有新的需求或变化时,能够对现有代码进行扩展,以适应新的状况。 对修改封闭,意味着类一旦设计完成,就能够独立完成其工做,而不要对类进行任何修改。 这样的设计,可以面对需求改变却能够保持相对稳定,从而使系统在第一个版本之后不断推出新的版本;面对需求,对程序的改动是经过增长新的代码进行的,而不是更改现有的代码; 开放封闭原则,是最为重要的设计原则,Liskov替换原则和合成/聚合复用原则为开放封闭原则的实现提供保证。
三种类型函数
建立型、结构型、行为型。
1.建立型
建立型模式用来处理对象的建立过程,主要包含如下5种设计模式:ui
工厂方法模式(Factory Method Pattern) 抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 单例模式(Singleton Pattern)
2.结构型
结构型模式用来处理类或者对象的组合,主要包含如下7种设计模式:设计
适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 组合模式(Composite Pattern) 装饰者模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern)
3.行为型
行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含如下11种设计模式:代理
责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 策略模式(Strategy Pattern) 模板方法模式(Template Method Pattern) 访问者模式(Visitor Pattern)
模式虽多,JavaScript中经常使用的有14种模式code
单例模式 策略模式 代理模式 迭代器模式 观察者模式(发布-订阅模式) 命令模式 组合模式 模板方法模式 享元模式 职责链模式 中介者模式 装饰器模式 状态模式 适配器模式