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

8 篇文章 0 订阅

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

举例来说

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值