设计模式之桥接模式

来源:互联网 发布:python idle无法打开 编辑:程序博客网 时间:2024/05/24 06:52

概述

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

意图

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

结构图

结构图

模仿手机安装软件的例子

新建手机和应用类

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 installingiPhone 6s: running app: 通讯录iPhone 6s: 相机 is installingiPhone 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 installingiPhone 6s: running app: 网易云音乐iPhone 6s: 天天动听 is installingiPhone 6s: running app: 天天动听


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

demo下载地址

0 0
原创粉丝点击