设计模式之桥接模式学习笔记

何时使用:

当一个类具有两个维度及以上的可变维度时,就可以使用到桥接模式,这也是桥接模式与策略模式的一个使用的区别,策略模式生成的策略树往往只能应对一个可变维度。

具体例子分析:

现在需要实现一个画图程序的主体框架,包括以下部分,图形:点、线、矩形、圆…,线形:实线、虚线、双线…,如果使用策略模式实现主体框架的话会导致具体策略实现的组合爆炸,会生成4*3种具体的策略方式,并且每次每个类型中增加一项都要增加很多具体的策略实现,显然此时策略模式就无法胜任这个工作。下面我们就来看一下怎么使用桥接模式去完成这个画图程序的框架。

public class bridge_pattern {

	abstract class shape {
		lineshape lineshape;

		abstract void draw();
	}

	abstract class lineshape {
		abstract void draw();
	}

	class real_line extends lineshape {

		@Override
		void draw() {
			// TODO Auto-generated method stub
			System.out.println("使用了实线");
		}

	}

	class virtual_line extends lineshape {

		@Override
		void draw() {
			// TODO Auto-generated method stub
			System.out.println("使用了虚线");
		}

	}

	class double_line extends lineshape {

		@Override
		void draw() {
			// TODO Auto-generated method stub
			System.out.println("使用了双线");
		}

	}

	class point extends shape {

		@Override
		void draw() {
			// TODO Auto-generated method stub
			System.out.println("画了一个点");
			lineshape.draw();
		}

	}

	class line extends shape {

		@Override
		void draw() {
			// TODO Auto-generated method stub
			System.out.println("画了一条线");
			lineshape.draw();
		}

	}

	class rectangle extends shape {

		@Override
		void draw() {
			// TODO Auto-generated method stub
			System.out.println("画了一个矩形");
			lineshape.draw();
		}

	}

	class circle extends shape {

		@Override
		void draw() {
			// TODO Auto-generated method stub
			System.out.println("画了一个圆");
			lineshape.draw();
		}

	}

	public static void main(String[] args) {
		bridge_pattern b=new bridge_pattern();
		shape circle =b.new circle();
		lineshape virtual_line =b.new virtual_line();
		circle.lineshape=virtual_line;
		circle.draw();
	}

}
对于维度的理解:

个人理解维度应该是需要被组合在一起的可变因素,如果两个可变部分不需要被同时考虑,则可以直接使用策略模式做成两棵独立的策略树,如果需要被组合在一起,那桥接模式会比策略模式更加适合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值