Bridge Design Pattern (桥模式)

桥模式的核心思想在于:抽象和行为分离。

在JDON里面,板桥里人举的例子是咖啡(抽象)与加奶(行为)的关系。原文(http://www.jdon.com/designpatterns/bridge.htm)

意思比较清晰,比如说,按照排列组合关系,大杯咖啡,小杯咖啡,和是否加奶,能够组成四种组合:大杯加奶,小杯加奶,大杯不加奶,小杯不加奶,如果再加一种行为进去,比如加巧克力,或者加方糖什么的,势必会出现更多的组合。如果为每一种组合创造一种对象,会造成对象过多代码混乱的状况。

还有很多例子阐述类似的问题,比如两类人(抽象)与行为的关系,男人穿衣服,女人穿衣服,男人戴帽子,女人戴帽子,诸多的例子,都是在说明桥模式的应用场景。

桥模式的核心思想正是在这里:将抽象与行为分离开,以排列组合的方式降低类型的个数,也让代码更为清晰,具备更好的维护性。

代码如下:

package dp.birdge;

/*
 * 抽象:笔
 */
public abstract class Pen {

	protected Color color;

	public void draw() {
		color.draw();
	}

}
package dp.birdge;

public class LongPen extends Pen {

	public LongPen(Color color) {
		this.color = color;
	}

	public void draw() {
		System.out.print("Use long pen >> ");
		super.draw();
	}
}



package dp.birdge;

public class ShortPen extends Pen {

	public ShortPen(Color color) {
		this.color = color;
	}

	public void draw() {
		System.out.print("Use short pen >> ");
		super.draw();
	}
}



package dp.birdge;

public abstract class Color {
	protected String color;

	/*
	 * 行为
	 */
	public void draw() {
		System.out.println("Draw " + this.color);
	}
}



package dp.birdge;

public class DrawGreen extends Color {
	public DrawGreen() {
		this.color = "green";
	}
}



package dp.birdge;

public class DrawRed extends Color {
	public DrawRed() {
		this.color = "red";
	}
}



package dp.birdge;

public class Main {
	public static void main(String ares[]) {
		Color green = new DrawGreen();
		Color red = new DrawRed();

		Pen longGreenPen = new LongPen(green);
		Pen longRedPen = new LongPen(red);

		Pen shortGreenPen = new ShortPen(green);
		Pen shortRedPen = new ShortPen(red);

		longGreenPen.draw();
		longRedPen.draw();
		shortGreenPen.draw();
		shortRedPen.draw();
	}
}




运行结果如下:

Use long pen >> Draw green
Use long pen >> Draw red
Use short pen >> Draw green
Use short pen >> Draw red



转载于:https://my.oschina.net/nox/blog/486767

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值