设计模式

设计模式的六大原则

  • 开闭原则
    对扩展开放,对修改关闭。
  • 里氏代换原则
    任何出现基类的地方都可以用其子类去替换。
  • 依赖倒转原则
    依赖抽象而不依赖具体实现。
  • 接口隔离原则
    尽量使用多个隔离的接口而不是单个接口来降低耦合。
  • 迪米特法则
    一个实体应该尽量少的与其它实体间有任何关系,使得类和模块间相互独立。
  • 合成复用原
    尽量使用合成/聚合的方式而不是继承来复用原有类的特性功能。

结构型模式

适配器模式

把原有类的功能进行封装,转换成另一个接口的实现。使能通过调用新接口来调用原有类的功能

设计模式_第1张图片
Paste_Image.png

class Original

public class Original{
  
  public void originalMethod(){
    //原始功能实现
  }

}

interface Target

  public interface Target{
    
    void newMethod();
  }

Class Adapter

  public class Adapter{
    private Original original;
    public Adapter(Original original){
      this.original = original;
    }
    @Override
    public void newMethod(){
      original.originalMethod();
    }
  }

装饰模式

装饰类和被装饰类实现相同的接口,装饰类通过持有被装饰类的实例来动态增强被装饰类的功能

设计模式_第2张图片
Paste_Image.png

interface Common

  public interface Common{
    
    void commonMethod();
  }

Class Source

  public class Source implements Common{
    
    @Override
    public void commonMethod(){

    }
  }

class Decorator

  public class Decorator implements Common{
    private Source source;
    public Adapter(Source source){
      this.source = source;
    }
    @Override
    public void commonMethod(){
      //增强逻辑
      ......
      source.commonMethod();
      //增强逻辑
      ......
    }
  }

代理模式

代理对象提供一层封装来控制对被代理对象的访问
与装饰模式的实现基本相同,不同点是:装饰模式关注的是对被装饰模式功能的增强,被装饰模式一定会执行。代理模式关注的是对被代理对象的访问控制,被代理模式不一定会执行。

外观模式

通过对一系列复杂有一定关联性的逻辑进行封装,解除他们之间的依赖性,屏蔽底层复杂的细节,对外提供一个统一的简单的接口
例如:回家之后就要把家里的灯打开,空调打开,热水器打开。离开家的时候又要把所有的灯,空调,热水器都关了。

设计模式_第3张图片
Paste_Image.png

class Light

  public class Light{
    public void start(){
      
    }
     public void stop(){
      
    }
  }

class Facader

  public class Facader{
    Light light;
    Conditinor conditionorl
    WaterHeader waterHeader;
    public Facader(){
      light = new Light();
      conditionor = new Conditionor();
      waterHeader = new WaterHeader();
    }
    public void start(){
      light.start();
      conditionor.start();
      waterHeader.start();
    }
    public void stop(){
      light.stop();
      conditionor.stop();
      waterHeader.stop();
    }
  }

简单记录自己对设计模式相关的理解,便于复习用

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