策略模式与桥接模式

策略模式

参考

       http://zhanche2011.iteye.com/blog/1169948

       http://www.uml.org.cn/sjms/201009092.asp

桥接模式

参考

        http://blog.csdn.net/jason0539/article/details/22568865

理解

        由于具体需要,某个类有两个或者两个以上的维度变化,而且这些变化之间存在着联系。虽然可以通过继承来实现,但这必然会导致类的臃肿。

        例如杯子,从材质上看可以分为纸杯,塑料杯等;从用途上可以分为水杯,咖啡杯等。如果需要纸质的水杯,可以新建一个纸质水杯类,要么从纸质杯继承,要么从水杯继承都可以;如果需要一个塑料水杯也同样如此。按此种逻辑进行下去就会发现,当添加一种材质或者用途时,要新建的类就会增加许多。因此,采用继承方法并不能很好的解决这个问题。

        桥接模式就是为了解决该问题的:它使用聚合代替继承

示例

//按用途分类时的父类
public abstract class UseCup implements Cup {
	MaterialCup materialCup;//通过组合方式将材质与用途关联。
	/**
	 * 指定该杯子的材质。在构造时指定材质,这样在使用时可以很方便的指定某种用途的杯子的材质.
	 */
	public UseCup(MaterialCup cup) {
		this.materialCup = cup;
	}
	public abstract void use();
}
使用时如下:

		//想要一个纸质的水杯
		UseCup uc1 = new WaterCup(new PaperCup());
		uc1.use();
		//想要一个瓷质的酒杯
		UseCup c2 = new WineCup(new ChinaCup());
		c2.use();
        假设我们还想要一个纸质的酒杯,就可以将c2换成new WineCup(new PaperCup())。再假设新添加了纸质咖啡杯和瓷咖啡杯,那么只需要建立一个CofferCup继承UseCup,并且在使用时分别传入PaperCup和ChinaCup的对象,这样就得到了两种材质的咖啡杯。


你可能感兴趣的:(策略模式与桥接模式)