# pattern ## pattern 介绍 23种设计模式(java源码实现) 来源于:《图解设计模式》 pattern 安装教程 1. jdk8 2. maven3 设计模式6个原则 摘抄博客:https://www.cnblogs.com/xiaobaizhang/p/7778494.html ```java 1. 单一职能 不要存在多于一个导致类变更的原因即一个类只负责一项职责 优点: (1)可以降低类的复杂度,一个类只负责一项职责,其逻辑一定比负责多项职责简单 (2)提高类的可读性,提交系统的可维护性 (3)变更引起的风险降低,变更是必然的,如果单一职能原则遵循的好,修改功能是,可以显著的降低对其他功能的影响。 体现:程序模块化 2. 里氏替换 子类可以实现父类的抽象功能,尽量不要改变父类的已经实现功能 含义: (1)子类可以实现父类的抽象方法,但不能重写父类非抽象方法 (2)子类可以增加自己特有的方法 (3)当子类的方法重载父类的方法时,方法的前置条件要(方法参数)比父类方法的输入参数宽松 (4)当子类的方法实现父类的抽象方式时,方法的后置条件(方法的返回值)要比父类更严格 3. 依赖倒置 高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节(实现类);细节应该依赖抽象 措施: (1)底层模块尽量要有抽象类或者接口,或者两者都有 (2)变量的声明类型尽量是接口或者抽象类 (3)使用继承遵循里氏替换原则 依赖倒置核心:面向接口编程或者面向抽象编程 4. 接口隔离 客户端不应该依赖它不需要的几口;一个类对另外一个类的依赖应该建立在最小接口上 解决方案:将臃肿的接口拆分成几个独立的接口. 注意细节: (1)接口尽量小,但要有限度.对接口细化可以提高程序的灵活性。但是过度拆分会导致程序复杂度上升,接口增多 (2)为依赖接口的类定制服务,只暴露调用的类需要的方法,它不需要的方法则隐藏。只有专注地为一个模块提供定制化服务,才能建立最小依赖关系 (3)提高内聚,减少对外交互.使接口用最小的方法去完成最多的方法. 5. 迪米特(最少知道原则) 一个对象应该对其他对象保持最少的了解 问题由来:类与类之间的关系越来越密切,耦合度越大。当一个类发生改变,对另外一个类的影响也越大 解决方案:尽量降低类与类之间的耦合度(高内聚低耦合) 6. 开闭原则 一个软件实体如类 模块和函数都应该对扩张开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化 升级和维护等原因,对原来代码进行修改,可能会为旧代码引入错误。也可能会使我们不得不重构,并且需要对原有的代码经过重新测试 解决方案:当软件需要变化时,尽量通过扩张软件的实体的行为来实现变化,而不是通过修改原有的代码 用抽象构建框架,用实现扩展细节 总结:单一职责告诉我们类的功能尽量单一;里氏替换告诉我们不要破坏继承体系;依赖倒置告诉我们要面向接口编程;接口隔离告诉我们设计接口的时候要精简单一; 迪米特告诉告诉我们要降低耦合;开闭原则是总纲,告诉我们要对修改关闭,对扩张开放 ``` 设计模式模型 1. 创建型:单例模式(singleton),工厂模式(Factory), 抽象工厂模型(abstractFactory),原型模式(prototype), 建造者模式(builder) 2. 结构型: 代理模式(proxy), 装饰者模式(decorator) ,适配器模式(adapter), 外观模式(facade) , 容器模式(composite) ,享元模式(flyweight),桥梁模式(bridge) 3. 行为型:策略模式(strategy),责任链模式(responsibility),命令模式(common),仲裁者模式(mediator),模板方法模式(template),迭代器模式(iterator),访问者模式(visitor),观察者模式(observer),解析器模式(interpreter),备忘录模式(memento),状态模式(state)