设计模式学习笔记(10)——桥接模式

本人做的设计模式学习笔记系列的博文旨在用于个人学习之用,主要记载自己对设计模式的理解及代码的实现

桥接模式(Bridge Pattern)

  当一个类具有多个独立变化的维度的时候,可以使用桥接模式将维度进行分离,以便日后代码的扩展和维护。在桥接模式中主要的角色有抽象类(Abstraction,是桥接模式的桥的一端,在抽象类中会定义一个实现类接口)。实现类接口(Implementer,由具体实现类实现该接口,是桥另一端)。具体实现类(ConcreteImplementer,实现Implementer)。扩展/细化抽象类(RefinedAbstratction,通常是具体类,实现在抽象类中定义的接口并且可以调用Implementer中定义的方法)。以下给出代码。

/*
 * 抽象类,桥接模式中桥的一端
 * */
abstract class Abstraction{
    protected Implementer implementer;

    //这里使用的是注入的方式进行赋值
    public void setImplementer(Implementer implementer) {
        this.implementer = implementer;
    }

    //抽象业务方法
    public abstract void AbsOpt();
}

/*
 * 细化抽象类1
 * */
class RefinedAbstratction1 extends Abstraction{

    @Override
    public void AbsOpt() {
        implementer.ImplOpt();
        System.out.println("This is Refined Abstraction 1");
    }

}

/*
 * 细化抽象类2
 * */
class RefinedAbstratction2 extends Abstraction{

    @Override
    public void AbsOpt() {
        implementer.ImplOpt();
        System.out.println("This is Refined Abstraction 2");
    }

}

/*
 * 实现类接口,桥的另一端
 * */
interface Implementer{
    public void ImplOpt();
}

/*
 * 具体实现接口类1
 * */
class ConcreteImplementer1 implements Implementer{

    @Override
    public void ImplOpt() {
        System.out.println("This is ConcreteImpl 1");
    }

}

/*
 * 具体实现接口类2
 * */
class ConcreteImplementer2 implements Implementer{

    @Override
    public void ImplOpt() {
        System.out.println("This is ConcreteImpl 2");
    }

}

public class BridgePattern {
    public static void main(String[] args) {
        Abstraction abst=(Abstraction)new RefinedAbstratction1();
        Implementer impl=(Implementer)new ConcreteImplementer1();
        abst.setImplementer(impl);
        abst.AbsOpt();
    }
}

运行结果
This is ConcreteImpl 1
This is Refined Abstraction 1

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