java设计模式之桥接模式(Bridge)

桥接模式

桥接模式关注的是抽象的设计,抽象是指包含了一组抽象方法的类(抽象类),这些抽象方法可以包含多个实现。意图在于将抽象与抽象方法实现相互分离来实现解耦,以独立的方式存在。
注意:对于两个独立变化的维度,使用桥接模式再适合不过了。

常规抽象

UML图
现有类

这是两个描述行为的类,他们有相似的方法,在Dog中有eat()和look(),在bride中也有eat()和look()方法,但是它们却写在不同的类中。在我们不可以改变控制类的时候,需要一个【抽象类】来转发控制命令,对应到相应的控制器方法上【抽象的提取】
如:开关是一个抽象,不管其具体怎么实现。

UML图
已有类实现抽象

或者

新类实现抽象

注:常规抽象,将引入接口并且实现接口


从抽象到桥接

在为动物添加新的行为的时候,只需实现新的子类,但是如果需要说明动物的非行为的维度时候,我们不可能在行为抽象去实现,这样就需要为每个实现写新的子类去做握手实现的方式,这样做的方式,在实现越来越多的时候,会增加维护的难度。这种情况下就需要使用桥接模式,首先需要将抽象方法分离到单独的类层次结构中去【接口】,再将Aminal单独给抽象出来的接口提供实现【implements】,就可以写入新的抽象方法。

UML图
桥接模式


现有的类

class Dog{
    viod eat(){}
    void look(){}
}
class Bride{
    viod eat(){}
    void look(){}
    void fly(){}
}

分离出来的行为接口

interface AnimalAction {
    viod eat();
    void look();
}

实现的接口

class DogManager implements AnimalAction {
    private Dog dog;
    viod eat(){dog.eat();}
    void look(){dog.look();}
}
class BrideManager implements AnimalAction {
    private Bride bride;
    viod eat(){bride.eat();}
    void look(){bride.look();}
}

对于动物的描述,需要加一个新的维度,两个维度相互独立,这时就需要使用桥接的模式,创建一个新的层次的类【抽象类

抽象类

abstract class AbstractAnimal {
    private AnimalAction animalAction;

    void weight(); 
}

一个子类对抽象类的实现

class AnimalProperty extends AbstractAnimal {
    @Override
    void wight(){}
}

猜你喜欢

转载自blog.csdn.net/hfc189933/article/details/82110134