设计模式

设计模式:对代码开发经验的总结,解决特定问题。提高代码可复用性、可维护性、可读性、稳健性、安全性的解决方案。

设计原则

  • 单一职责原则:一个类/方法只负责一项职责/操作。降低类的复杂度,提高可读、可维护性,降低变更风险。
  • 开闭原则:对扩展开发,对修改关闭。
  • 里式替换原则:子类可以替换父类。1、子类必须实现父类的抽象方法,单不得覆盖或修改父类的非抽象方法;2、子类可以增加自己的特有方法;3、子类覆盖实现父类方法时,方法的前置条件(即形参)要比父类方法参数更宽松;4、方法的后置条件(即返回值)要比父类更严格。
  • 依赖导致原则:1、抽象不应该依赖细节,细节应该依赖抽象(即针对接口而并非实现层);2、代码中传递参数时或关联关系中,尽量引用层次高的抽象层类。
  • 接口隔离原则:1、客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上;接口太大时,需要分隔成更细小的接口。2、接口不能太小,太小导致接口泛滥不易维护;也不能太大,太大违背接口隔离原则,灵活性较差。
  • 迪米特法则(最小知识原则):一个对象对其他对象应该有最小的了解。降低类之间的耦合。

    
设计模式分类

  1. 创建型模式:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式
  2. 结构型模式:适配器模式、桥接模式、组合模式、装饰模式、外装模式、享元模式、代理模式
  3. 行为型模式:访问者模式、模板模式、策略模式、状态模式、观察者模式、备忘录模式、中介者模式、迭代器模式、解释器模式、命令模式、责任链模式

 

常用设计模式

  • 创建型模式
  1. 单例模式(singleton):饿汉模式(线程安全)、懒汉模式(线程不安全,解决:实例化方法加同步锁/双重检查锁/静态内部类/枚举类型(防止被反射修改)。synchronize:禁止指令重排序、前后读写屏障)。使用案例:Runtime类。
  2. 建造者模式(builder):构建者模式。将一个复杂对象的构建与表示分离,使用简单的对象一步一步构建成一个复杂的对象。使用案例:StringBuffer、StringBuilder类,lombok工具插件,Calendar日期类型。
  3. 简单工厂模式(factory):静态工厂方法模式。定义一个类来负责创建其他类的实例,类的构建工厂。解决if-else问题,对其进行抽取。使用案例:Mybatis。
  • 结构型模式
  1.  代理模式(proxy):通过代理访问目标对象。需要修改别人的方法时,不要随意改动,通过代理的方法进行扩展。代理类与目标类实现相同接口,可进行前置、后置增强。
  2.  适配器模式(adapter):两个不兼容接口之间的桥梁,结合了两个独立接口的功能。将一个接口转换成另一个接口。使用案例:Java的Arrays,Collections类,spring的HandleMapping类。
  • 行为型模式
  1. 观察者模式(observer):当一个对象被修改时,自动通知它的依赖对象。存在一对多关系时使用。使用案例:http session。
  2. 责任链模式(chain):为请求创建一个接收者对象的链。对请求的发送者与接收者解耦。每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。一条执行链的每个节点进行匹配。使用案例:java.util.Logger.log()。

        

你可能感兴趣的:(Java,设计模式)