您的位置:首页 > 其它

设计模式之桥接模式

2016-08-04 15:12 246 查看

概述

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

意图

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

结构图



模仿手机安装软件的例子

新建手机和应用类

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下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: