设计模式-桥接模式(Bridge)

桥接模式是构造型模式之一。把抽象(Abstraction)与行为实现Implementor)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。

角色和职责:

1.抽象类(Abstraction)-Car:

   维护对行为实现(Implementor)的引用

2.具体实现(Concrete Abstraction)-Bus、Jeep:

  具体实现

3.行为类(Implementor)-Engine:

  行为实现类接口

4.行为类具体实现(Concrete Implementor)-Engine2000、Engine2200:

  行为类具体实现

UML图:

代码如下:

/**
 * 行为:安装引擎
 */
public interface Engine {
    void installEngine();//安装引擎
}
/**
 * 行为:安装引擎2000
 */
public class Engine2000 implements Engine{
    @Override
    public void installEngine() {
        System.out.println("安装引擎2000");
    }
}
/**
 * 行为:安装引擎2200
 */
public class Engine2200 implements Engine{
    @Override
    public void installEngine() {
        System.out.println("安装引擎2200");
    }
}
/**
 * 汽车
 */
public abstract class Car {
    protected Engine engine;//引擎的引用
    public Car(Engine engine){
        this.engine = engine;
    }
    public abstract void installEngine();
}
/**
 * bus
 */
public class Bus extends Car{
    public Bus(Engine engine) {
        super(engine);
    }
    @Override
    public void installEngine() {
        System.out.print("bus:");
        engine.installEngine();
    }
}
/**
 * jeep
 */
public class Jeep extends Car{
    public Jeep(Engine engine) {
        super(engine);
    }

    @Override
    public void installEngine() {
        System.out.print("jeep:");
        engine.installEngine();
    }
}
public class Main {
    public static void main(String[] args) {
        Engine engine2000 = new Engine2000();//引擎2000
        Engine engine2200 = new Engine2200();//引擎2200

        Car bus2000 = new Bus(engine2000);//bus安装2000引擎
        bus2000.installEngine();
        Car bus2200 = new Bus(engine2200);//bus安装2200引擎
        bus2200.installEngine();

        Car jeep2000 = new Jeep(engine2000);//jeep安装2000引擎
        jeep2000.installEngine();
        Car jeep2200 = new Jeep(engine2200);//jeep安装2200引擎
        jeep2200.installEngine();
    }
}

结果:

bus:安装引擎2000
bus:安装引擎2200
jeep:安装引擎2000
jeep:安装引擎2200

源码地址:https://github.com/qjm201000/design_pattern_bridge.git

猜你喜欢

转载自www.cnblogs.com/qjm201000/p/10071671.html