桥接模式
模式说明
结构
代码示例
package com.yukiyama.pattern.structure;
/**
* 桥接模式
*/
public class BridgeDemo {
public static void main(String[] args) {
// 声明一个PC(主体事物)
PC pc = new ApplePC();
// 声明一个软件(分离事物)
Software soft1 = new Browser();
// 将软件组合进PC中(主体持有分离)
pc.setSoftware(soft1);
// 通过调用主体事物的方法来间接执行分离事物的方法
// 输出"启动: Browser"
pc.run();
// 增加一个软件后,同上
Software soft2 = new MusicPlayer();
pc.setSoftware(soft2);
// 输出"启动: MusicPlayer"
pc.run();
}
}
/**
* 主体事物抽象类
* 以PC为例,内部声明protected修饰的分离事物Software。非抽象方法
* setSoftware()传入分离事物使得主体持有分离。声明用于实施Software
* 行为抽象方法run()。
*/
abstract class PC{
protected Software soft;
public void setSoftware(Software soft) {
this.soft = soft;
}
public abstract void run();
}
/**
* 主体事物具体类
* 继承抽象主体事物类,实现抽象方法run,内部实际调用Software自身的run。
*/
class ApplePC extends PC{
@Override
public void run() {
this.soft.run();
}
}
/**
* 抽象分离事物类
* 有自身的属性和方法。
* 下例是从软件维度描述PC的软件抽象类。
*/
abstract class Software{
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract void run();
}
/**
* 具体分离事物类
* 继承抽象分离事物类,实现抽抽象方法。
* 下例是浏览器类。
*/
class Browser extends Software{
public Browser() {
this.setName("Browser");
}
@Override
public void run() {
System.out.println("启动: "+this.getName());
}
}
/**
* 具体分离事物类
* 下例是音乐播放器类。
*/
class MusicPlayer extends Software{
public MusicPlayer() {
this.setName("MusicPlayer");
}
@Override
public void run() {
System.out.println("启动: "+this.getName());
}
}Last updated