JAVA设计模式之桥接模式

151 阅读2分钟

本文介绍23种设计模式之桥接模式。

定义

使用桥接模式(Bridge Pattern)不只改变你的实现,也改变你的抽象。 其实就是说通过组合的方式将抽象和实现分离,从而达到解耦的效果。

描述

  • 模式名称:BRIDGE(桥接)
  • 类型:对象结构型模式
  • 意图:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
  • 适用性:
    • 在程序运行时实现部分应可以被切换,希望在抽象和它的实现部分之间是动态绑定的关系。
    • 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必修改。
  • 效果:
  • 优点:
    • 分离接口及其实现部分。
    • 提高可扩展性,你可以独立地对抽象和实现类进行扩展。
  • 缺点:
    • 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

类图

1629338546(1).png

  1. 抽象化(Abstraction):定义抽象类,并包含一个对实现化对象的引用。
  2. 扩展抽象化(ConcreteAbstraction):是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
  3. 实现化(Implementor):定义实现化角色的接口,供扩展抽象化角色调用。
  4. 具体实现化(ConcreteImplementor):给出实现化角色接口的具体实现。

实现代码

做一个遥控器和电视的实现,通过组合的方式可以将 遥控器和电视解构,其子类也可进行独立改变

电视机类(Implementor)

public interface Tv {
    abstract void on();

    abstract void off();

    abstract void tuneChannel(int i);


}

ConcreteImplementor

public class ConcreteTv implements Tv {
    @Override
    public void on() {

    }

    @Override
    public void off() {

    }

    @Override
    public void tuneChannel(int i) {
        System.out.println("ConcreteTv 切换为频道"+i);
    }
}

遥控器类(Abstraction)

public abstract class RemoteControl {
   private Tv tv;

   public RemoteControl(Tv tv){
       this.tv = tv;
   }

   public void on(){
       tv.on();
   }

   public void off(){
       tv.off();
   }

   public void  setChannel(int i){
       tv.tuneChannel(i);
   }
}

ConcreteAbstraction

public class ConcreteRemote extends RemoteControl {
    int currentStation;

    public ConcreteRemote(Tv tv) {
        super(tv);
    }

    //实现类可以在抽象类基础上进行独立改变
    public void nextChannel(){
        setChannel(currentStation+1);
    }


}