设计模式——桥接模式

来源:互联网 发布:股票价值分析软件 编辑:程序博客网 时间:2024/05/22 00:51

一、概念

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

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


桥接模式的结构图:

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

 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/

转载:http://www.cnblogs.com/draem0507/p/3794530.html

0 0
原创粉丝点击