桥接模式

桥接模式(Bridge),将抽象部分与它的实现分离,使它们可以独立地变化。

理解:实现系统可能有多个角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
比如:手机有很多品牌,每种品牌的手机都有多个不用的游戏。

则可以分为手机品牌和手机软件,手机软件属于手机品牌,它们属于聚合关系。

桥接模式的核心意图就是把这些实现独立出来,让它们各自的变化,这就使得每种实现的变化不会影响其他实现,从而达到应对变化的目的。

当我们发信啊需要多角度去分类实现对象,而只用继承会造成大量的类增加,不能满足开放-封闭原则时,就应该考虑用桥接模式了。

MobileBrand类

package bridge;

public abstract class MobileBrand {
    protected MobileSoft soft ;
    public void setMobileSoft(MobileSoft soft){
        this.soft = soft;
    }
    public abstract void run();
}

MobileBrandM类

package bridge;

public class MobileBrandM extends MobileBrand {

    @Override
    public void run() {
        soft.run();
    }

}

MobileBrandN类

package bridge;

public class MobileBrandN extends MobileBrand {

    @Override
    public void run() {
        soft.run();
    }

}

MobileSoft类

package bridge;

public abstract class MobileSoft {
    public abstract void run();
}

MobileSoftA类

package bridge;

public class MobileSoftA extends MobileSoft {

    @Override
    public void run() {
        System.out.println("运行手机软件A");
    }

}

MobileSoftB类

package bridge;

public class MobileSoftB extends MobileSoft {

    @Override
    public void run() {
        System.out.println("运行手机软件B");
    }

}

MobileSoftC类

package bridge;

public class MobileSoftC extends MobileSoft {

    @Override
    public void run() {
        System.out.println("运行手机软件C");
    }

}

Business类

package bridge;

public class Business {

    public static void main(String[] args) {
        MobileBrand bandM = new MobileBrandM();
        bandM.setMobileSoft(new MobileSoftA());
        bandM.run();
        bandM.setMobileSoft(new MobileSoftB());
        bandM.run();
        MobileBrand bandN = new MobileBrandM();
        bandN.setMobileSoft(new MobileSoftA());
        bandN.run();
        bandN.setMobileSoft(new MobileSoftB());
        bandN.run();
        bandN.setMobileSoft(new MobileSoftC());
        bandN.run();
    }

}
原文地址:https://www.cnblogs.com/ccgjava/p/7152919.html