桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。
桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。
以下是示例代码:
//以下接口代表面条是否添加辣椒(该接口代表了面条在辣味风格这个维度上的变化)
public interface Peppery{
String style();
}
//实现类代表辣椒的风格
public class PepperyStyle implements Peppery{
public String style(){
return "辣味";
}
}
public class PlainStyle implements Peppery{
public String style(){
return "清淡" ;
}
}
/^
对于系统而言,辣味风格这个维度上的变化是固定的,程序必须面对的,程序使用桥接模式将辣味风格这个维度的变化分离出来了,避免与牛肉、猪肉材料风格这个维度的变化耦合在一起。
接下来是AbstractNoodle抽象类,其本身可以包含很多实现类,不同实现类则代表了面条在材料风格这个维度上的变化。
*/
public abstract class AbstractNoodle{
protected Peppery style;
public AbstractNoodle(Peppery style){
this.style = style;
}
public abstract void eat();
}
//这样就可以完成辣味风格、材料风格两个维度上变化的组合
/*
AbstractNoodle抽象类可看做是一个桥梁,它被用来“桥接”面条的材料风格的改变与辣味风格的改变,使面条的特殊属性得到无绑定的扩充。
*/
//以下是猪肉面实现类
public class PorkNoodle extends AbstractNoodle{
public PorkyNodle(Peppery style){
super(style);
}
public void eat(){
System.out.println( "猪肉面条的口味:"+super.style.style());
}
}
//测试类
public class Test{
public static void main(String[] args){
AbstractNoodle noodle = new PorkNoodle(new PepperyStyle());
noodle.eat();
AbstractNoodle noodle = new PorkNoodle(new PlainStyle());
noodle.eat();
}
}
转载自http://blog.163.com/xiaokangzhijia@126/blog/static/1659548562010111843618596/