设计模式之桥梁模式

Bridge Pattern:将类的抽象部分与实现部分分离,使它们可以独立地变化。

当一个类的分类可以有多种方式的时候,比如说手机里的应用,可以先按照手机品牌区分,然后再按照应用种类区分;也可以先按照应用种类来区分,然后再按照手机品牌区分。而且品牌和应用种类都可以随意添加。如果直接使用继承来实现,每增加一种品牌,就要多继承出已有应用种类数量的新品牌类,这显然是十分不科学的。

根据合成/聚合复用原则,应该尽量使用合成/聚合方式去组织类。因此可以考虑抽象出手机品牌类和手机应用类,手机品牌类依赖于手机应用类。

手机品牌类及其子类:(与App类的关系是aggregation关系)

public abstract class Phone {
    protected App app;

    public void setApp(App app) {
        this.app = app;
    }

    public void run() {
        System.out.print(getClass().getSimpleName() + " ");
        app.run();
    }
}

class MiPhone extends Phone {
}

class IPhone extends Phone {
}

应用类及其子类:

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

class Game extends App {
    @Override
    public void run() {
        System.out.println("run app game");
    }
}

class Contact extends App {
    @Override
    public void run() {
        System.out.println("run app contact");
    }
}

测试类:

public class Main {
    public static void main(String[] args) {

        final MiPhone miPhone = new MiPhone();
        miPhone.setApp(new Game());
        miPhone.run();

        final IPhone iPhone = new IPhone();
        iPhone.setApp(new Contact());
        iPhone.run();
    }
}

输出:

MiPhone run app game
IPhone run app contact

这样一来,如果要添加新的手机品牌或者手机应用,只要添加单个品牌类或者应用类即可,想要具体某种品牌某种应用的话,只要两两组合即可。

因为品牌类和抽象类两个类之间是聚合关系,将各自旗下的子类连接了起来,所以叫做Bridge Pattern。也就是所说的将抽象部分与其实现部分相分离,使之可以独立的变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值