学习笔记-轻量级Java EE:模式--桥接模式

来源:互联网 发布:狄克斯特拉算法举例 编辑:程序博客网 时间:2024/06/05 04:38

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

举例来说

1.假设现在我们需要为某个餐厅制造菜单,餐厅供应牛肉面、猪肉面,又有口味是否添加辣椒(无辣、微辣等等),假如后面还要添加新的风格呢?如果使用继承方式,每种都需要实现不同的子类;此时可以采用桥接模式,将变化的部分抽象出来,使变化部分与主类分离,最后提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需求。

2.假设在一块画布上,要画一个正方形或菱形或一个图片等,或者要拖动或选择,假如某一天又需要添加在这俩个维度上的动作,也可以采用桥接模式来满足该需求。

实例代码:

1.提供一个辣椒风格的接口:

public interface Peppery{String style();}
然后实现俩种辣椒风格:

public class PepperySytle implements Peppery{//实现"辣味"风格的方法public String style(){return "辣味很重,很过瘾...";}}
public class PlainStyle implements Peppery{//实现"不辣"风格的方法public String style(){return "味道清淡,很养胃...";}}
2.提供一个面条的抽象类:

public abstract class AbstractNoodle{//组合一个Peppery变量,用于将该维度的变化独立出来protected Peppery style;//每份Noodle必须组合一个Peppery对象public AbstractNoodle(Peppery style){this.style = style;}public abstract void eat();}
然后实现俩种不同的面:

public class PorkyNoodle extends AbstractNoodle{public PorkyNoodle(Peppery style){super(style);}//实现eat()抽象方法public void eat(){System.out.println("这是一碗稍嫌油腻的猪肉面条。"+ super.style.style());}}
public class BeefNoodle extends AbstractNoodle{public BeefNoodle(Peppery style){super(style);}//实现eat()抽象方法public void eat(){System.out.println("这是一碗美味的牛肉面条。"+ super.style.style());}}
测试类:

public class Test{public static void main(String[] args) {//下面将得到“辣味”的牛肉面AbstractNoodle noodle1 = new BeefNoodle(new PepperySytle());noodle1.eat();//下面将得到“不辣”的牛肉面AbstractNoodle noodle2 = new BeefNoodle(new PlainStyle());noodle2.eat();//下面将得到“辣味”的猪肉面AbstractNoodle noodle3 = new PorkyNoodle(new PepperySytle());noodle3.eat();//下面将得到“不辣”的猪肉面AbstractNoodle noodle4 = new PorkyNoodle(new PlainStyle());noodle4.eat();}}
至此,通过不同的组合,可以实现不同风格的面条,而辣味接口,也可以使用到其他的菜系里,实现复用性;


0 0
原创粉丝点击