现在的位置: 首页 > 综合 > 正文

java设计模式-桥接模式

2013年08月15日 ⁄ 综合 ⁄ 共 1387字 ⁄ 字号 评论关闭

桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。

      桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

      以下是示例代码:

//以下接口代表面条是否添加辣椒(该接口代表了面条在辣味风格这个维度上的变化)

 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/

抱歉!评论已关闭.