java 之 桥接模式(大话设计模式)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 之 桥接模式(大话设计模式)相关的知识,希望对你有一定的参考价值。

桥接模式定义为:将抽象部分与它的实现部分分离,使它们都可以独立的变化。

第一次看设计模式的时候,不是很清楚这句话的意思,随着笔者的不断开发,发现有一种场景,

继承关系多了,不易于维护父类,而笔者认为桥接模式的出现很好的解决了这个问题。用聚合解决继承的父类难维护性。先看下桥接模式设计图。

大话设计模式-类图

技术分享图片

以上类图很简单易懂,先看下笔者的demo

/**
 * 操作接口
 */
public interface IOperate {

    public void operate();
}
/**
 * 品牌父类
 */
public class Brand {

    private IOperate operate;


    public Brand(IOperate operate) {
        super();
        this.operate = operate;
    }

    public void operate() {
        operate.operate();
    }

    public IOperate getOperate() {
        return operate;
    }

    public void setOperate(IOperate operate) {
        this.operate = operate;
    }
}
/**
 * 玩游戏
 */
public class Game implements IOperate{
    @Override
    public void operate() {
        System.out.println("玩游戏");
    }

}
/**
 * 看通讯录
 */
public class MailList implements IOperate {
    @Override
    public void operate() {
        System.out.println("看通讯录");
    }

}
/**
 * M品牌
 */
public class MBrand extends Brand{

    public MBrand(IOperate operate) {
        super(operate);
    }

}
/**
 * N品牌
 */
public class NBrand extends Brand{

    public NBrand(IOperate operate) {
        super(operate);
    }

}
/**
 * 客户端
 */
public class Test {
    public static void main(String[] args) {
        IOperate game = new Game();
        IOperate mailList = new MailList();

        Brand nBrand = new NBrand(game);
        nBrand.operate();

        nBrand = new NBrand(mailList);
        nBrand.operate();

        Brand mBrand = new MBrand(game);
        mBrand.operate();

        mBrand = new MBrand(mailList);
        mBrand.operate();
    }
}

 

运行结果如下

玩游戏
看通讯录
玩游戏
看通讯录

 

比较好理解,不过笔者认为我们在实际开发中,可能很多地方会用到桥接模式,只是大家都忘记这个模式,而用继承去实现。

还是那句老话,理解其核心思想,拒绝生搬硬套。希望能帮助学习桥接模式的小伙伴。

以上是关于java 之 桥接模式(大话设计模式)的主要内容,如果未能解决你的问题,请参考以下文章

java 之 状态模式(大话设计模式)

结构型模式《大话设计模式》——读后感 (13)手机软件何时能统一?——桥接模式

java 之 模板模式(大话设计模式)

java 之 工厂模式(大话设计模式)

『设计模式』大话西游的移魂大法竟移出来了桥接模式

java 之 外观模式(大话设计模式)