设计模式之桥接模式

本文通过一个手机安装软件的例子,详细介绍了桥接模式的设计思想及其实现方式。通过将抽象部分与实现部分分离,使得两者可以独立变化,降低了系统的耦合度。

概述

在软件系统中,实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少它们之间的耦合。

意图

将抽象部分与实现部分分离,使它们都可以独立的变化。

结构图

结构图

模仿手机安装软件的例子

新建手机和应用类
public abstract class Phone {

    protected String name;
    protected Application app;

    public Phone(String name) {
        this.name = name;
    }

    public void installApp(Application app) {
        System.out.println(name + ": " + app.name + " is installing");
        this.app = app;
    }

    public abstract void run();

}

public abstract class Application {

    protected String name;

    public Application(String name) {
        this.name = name;
    }

    public abstract void run();

}
手机具体实现类
public class Android extends Phone {

    public Android(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.print(name + ": ");
        app.run();
    }

}

public class Apple extends Phone {

    public Apple(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.print(name + ": ");
        app.run();
    }

}
应用具体实现类
public class AddressList extends Application {

    public AddressList(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.println("running app: " + name);
    }

}

public class Camera extends Application {

    public Camera(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.println("running app: " + name);
    }

}
客户端实现代码
public class Client {

    public static void main(String[] args) {
        Phone phone = new Android("小米5");

        phone.installApp(new AddressList("通讯录"));
        phone.run();
        System.out.println();

        phone.installApp(new Camera("相机"));
        phone.run();
        System.out.println();

        phone = new Apple("iPhone 6s");

        phone.installApp(new AddressList("通讯录"));
        phone.run();
        System.out.println();

        phone.installApp(new Camera("相机"));
        phone.run();
        System.out.println();

    }

}
运行结果
小米5: 通讯录 is installing
小米5: running app: 通讯录

小米5: 相机 is installing
小米5: running app: 相机

iPhone 6s: 通讯录 is installing
iPhone 6s: running app: 通讯录

iPhone 6s: 相机 is installing
iPhone 6s: running app: 相机
扩展程序:新增应用
只需增加一个实现类
public class MusicPlayer extends Application {

    public MusicPlayer(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.println("running app: " + name);
    }

}
修改客户端代码:
phone.installApp(new MusicPlayer("网易云音乐"));
phone.run();
System.out.println();

phone.installApp(new MusicPlayer("天天动听"));
phone.run();
System.out.println();
运行结果
iPhone 6s: 网易云音乐 is installing
iPhone 6s: running app: 网易云音乐

iPhone 6s: 天天动听 is installing
iPhone 6s: running app: 天天动听


参考资料:【大话设计模式】 程杰 清华大学出版社

demo下载地址

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值