1. 场景
结构型模式
应对某个类具有两个或两个以上的维度变化
把变化部分抽象出来, 使变化部分与主类分离开来, 从而将多个维度的变化彻底分离
最后提供一个管理类来组合不同维度上的变化, 通过这种组合来满足业务的需要
JavaEE应用中常见的 Service 层对 DAO 层的引用正是桥接模式的应用
2. 实例
AbstractNoodle (面抽象类)
--BeefMoodle (牛肉面)
--PorkyNoodle (猪肉面)
Peppery (胡椒抽象接口)
--PepperySytle (加胡椒)
--PlainStyle (不加胡椒)
2-1. 抽象类
public abstract class AbstractNoodle {
// 组合一个 Peppery 变量, 用于将该维度的变化独立出来
protected Peppery style;
// 每份 Noodle 必须组合一个 Peppery 对象
public AbstractNoodle(Peppery style) {
this.style = style;
}
public abstract void eat();
}
2-2. 子类 (1)
public class BeefMoodle extends AbstractNoodle {
public BeefMoodle(Peppery style) {
super(style);
}
// 实现 eat() 抽象方法
public void eat() {
System.out.println("这是一碗美味的牛肉面条. " + super.style.style());
}
}
2-3. 子类 (2)
public class PorkyNoodle extends AbstractNoodle {
public PorkyNoodle(Peppery style) {
super(style);
}
// 实现 eat() 抽象方法
public void eat() {
System.out.println("这是一碗稍嫌油腻的猪肉面条. " + super.style.style());
}
}
2-4. 行为/属性抽象 (接口)
public interface Peppery {
String style();
}
2-5. 行为/属性实现类 (1)
public class PepperySytle implements Peppery {
// 实现 "辣味" 风格的方法
public String style() {
return "辣味很重, 很过瘾...";
}
}
2-6. 行为/属性实现类 (2)
public class PlainStyle implements Peppery {
// 实现 "不辣" 风格的方法
public String style() {
return "味道清淡, 很养胃...";
}
}
// 测试类
public class Test {
public static void main(String[] args) {
// 下面将得到“辣味”的牛肉面
AbstractNoodle noodle1 = new BeefMoodle(new PepperySytle());
noodle1.eat();
// 下面将得到“不辣”的牛肉面
AbstractNoodle noodle2 = new BeefMoodle(new PlainStyle());
noodle2.eat();
// 下面将得到“辣味”的猪肉面
AbstractNoodle noodle3 = new PorkyNoodle(new PepperySytle());
noodle3.eat();
// 下面将得到“不辣”的猪肉面
AbstractNoodle noodle4 = new PorkyNoodle(new PlainStyle());
noodle4.eat();
}
}
0 件のコメント:
コメントを投稿