桥接模式birdge

简介

桥接模式:将抽象与实现相分离,使他们可以独立变化。

角色

抽象化(Abstraction)角色: 该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现,抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象);
修正抽象(RefinedAbstraction)角色: Abstraction 的具体实现,对Abstraction 的方法进行完善和扩展;
实现化(Implementor)角色: 确定实现维度的基本操作,提供给 Abstraction使用。该类一般为接口或者抽象类;个人理解实现就是行为。
具体实现(ConcreteImplementor)角色: Implementor 的具体实现;

桥接模式birdge_第1张图片

案例

现在将实现一个人的职业(抽象)和爱好(实现)的系统。

爱好的接口以及实现:

interface Hobby{
    void doSth();
}

class ReadBook implements Hobby{
    @Override
    public void doSth() {
        System.out.println("我喜欢看书");
    }
}

class BasketBall implements Hobby{
    @Override
    public void doSth() {
        System.out.println("我喜欢打篮球");
    }
}

职业的抽象类和实现:
抽象类中聚合了Hobby以供继承了抽象类的子类使用。


public abstract class People {
    Hobby hobby;//聚合

    public People(Hobby hobby) {
        this.hobby = hobby;
    }
    public abstract void doHobby();
}

class Scientist extends People{

    public Scientist(Hobby hobby) {
        super(hobby);
    }
    @Override
    public void doHobby() {
        super.hobby.doSth();
    }
}

class Teacher extends People{
    public Teacher(Hobby hobby) {
        super(hobby);
    }
    @Override
    public void doHobby() {
        super.hobby.doSth();
    }
}

这样,人的职业(抽象)与爱好(实现)完全解耦。扩展时仅需要改变客户端(main)中的new对象就能改变抽象/行为。

测试方法:

public static void main(String[] args) {
        Scientist scientist = new Scientist(new BasketBall());
        scientist.doHobby();
        Teacher teacher = new Teacher(new ReadBook());
        teacher.doHobby();
    }

你可能感兴趣的:(设计模式,桥接模式,java,开发语言)