`

读《研磨设计模式》-代码笔记-桥接模式

阅读更多
声明:
本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/




/**
 * 个人觉得关于桥接模式的例子,蜡笔和毛笔这个例子是最贴切的:http://www.cnblogs.com/zhenyulu/articles/67016.html
 * 笔和颜色是可分离的,蜡笔把两者耦合在一起了:一支蜡笔只有一种颜色。大、中、小三种尺寸的蜡笔,12种颜色,那一共需要3*12个类
 * 画中国山水画时就不一样了,一支毛笔可以搭配不同的颜色,只需要大、中、小三支毛笔,外加12种颜色,那就只需12+3个类
 * 
 * 书上的例子:
 * 消息和消息发送
 * 消息有很多种,普通的、加急的
 * 消息发送方式也有很多种,站内信的、短信的、邮件的
 * 因此要把“消息”和“消息发送方式”分离开来。如果要增加一种消息或者增加一种发送方式,都不会影响到原来的代码
 * 
 * 网上的例子:
 * 公路和汽车
 * 也是同样的道理
 * 
 * 原来桥接模式就是把类的职责单一化,然后用类组合的形式来实现复杂的功能
 * 
 * 看一下下面的代码,发现桥接模式和策略模式是非常相似的。AbstractBrush就相当于是策略模式里面的Context,只是策略模式里面的Context通常
 * 只有一个,但桥接模式的AbstractBrush的实现有多个。可以把策略模式看作是桥接模式的退化
 */

interface IColor {
	
	void sprinkleOnCanvas();
	
}


class RedColor implements IColor {

	public void sprinkleOnCanvas() {
		System.out.println("Sprinkle red color on canvas." );
	}
	
}


class BlueColor implements IColor {
	
	public void sprinkleOnCanvas() {
		System.out.println("Sprinkle blue color on canvas." );
	}
	
}


abstract class AbstractBrush {
	
	protected IColor color;
	
	public AbstractBrush(IColor color) {
		this.color = color;
	}
	
	protected void paint() {
		this.color.sprinkleOnCanvas();
	}
	
}


class BigBrush extends AbstractBrush{

	public BigBrush(IColor color) {
		super(color);
	}
	
	public void paint() {
		System.out.print("Use big brush:");
		super.paint();
	}
	
}


class SmallBrush extends AbstractBrush{
	
	public SmallBrush(IColor color) {
		super(color);
	}
	
	public void paint() {
		System.out.print("Use small brush:");
		super.paint();
	}
	
}



/**
 * 书上的例子
 */
interface IMessageSender {
	
	void send(String message, String toUser);
	
}


//消息的基类。普通消息、加急消息都是它的子类
abstract class AbstractMessage {
	
	protected IMessageSender sender;
	
	public AbstractMessage(IMessageSender sender) {
		this.sender = sender;
	}
	
	public void sendMessage(String message, String toUser) {
		this.sender.send(message, toUser);
	}
	
}

//用短信的方式发送消息
class MessageSenderInSMS implements IMessageSender {

	public void send(String message, String toUser) {
		System.out.println("SMS:Send message to " + toUser + ",message is " + message);
	}
	
}


//用email的方式发送消息
class MessageSenderInEmail implements IMessageSender {
	
	public void send(String message, String toUser) {
		System.out.println("Email:Send message to " + toUser + ",message is " + message);
	}
}

//普通消息
class CommonMessage extends AbstractMessage {

	public CommonMessage(IMessageSender sender) {
		super(sender);
	}
	
	public void sendMessage(String message, String toUser) {
		super.sendMessage(message, toUser);
	}
	
}

//加急消息。比普通消息多了一些处理
class UrgencyMessage extends AbstractMessage {

	public UrgencyMessage(IMessageSender sender) {
		super(sender);
	}
	
	public void sendMessage(String message, String toUser) {
		message = "(urgency!)" + message;
		super.sendMessage(message, toUser);
	}
	
	public Object watch(String messageID) {
		System.out.println("Watching. MessageID = " + messageID);
		return null;
	}
}

public class BridgePatternBrush {
	
	public static void main(String[] args) {
		//先用红色。大笔和小笔各画一次
		IColor color = new RedColor();
		AbstractBrush bigBrush = new BigBrush(color);
		AbstractBrush smallBrush = new SmallBrush(color);
		bigBrush.paint();
		smallBrush.paint();
		//换一种颜色
		IColor color2 = new BlueColor();
		bigBrush = new BigBrush(color2);
		smallBrush = new SmallBrush(color2);
		bigBrush.paint();
		smallBrush.paint();
		
		//sms
		IMessageSender smsSender = new MessageSenderInSMS();
		AbstractMessage commonMessage = new CommonMessage(smsSender);
		AbstractMessage urgencyMessage = new UrgencyMessage(smsSender);
		commonMessage.sendMessage("hello", "Kobe");
		urgencyMessage.sendMessage("hello", "Kobe");
		//email
		IMessageSender emailSender = new MessageSenderInEmail();
		commonMessage = new CommonMessage(emailSender);
		urgencyMessage = new UrgencyMessage(emailSender);
		commonMessage.sendMessage("hello", "Kobe");
		urgencyMessage.sendMessage("hello", "Kobe");
		
	}
}

2
4
分享到:
评论
1 楼 helloguoxing 2012-09-13  
我感觉这就是策略设计模式。。

相关推荐

    研磨设计模式-配套源代码

    8. **桥接模式**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。它可以降低系统的耦合度,提高可扩展性。 9. **组合模式**:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合模式使得用户...

    研磨设计模式-配套源代码.7z

    《研磨设计模式》是一本深入探讨软件设计模式的书籍,其配套源代码包含了许多经典设计模式的实际应用示例。这些源代码可以帮助读者更直观地理解设计模式的原理和使用方法,进一步提升软件开发能力。 设计模式是软件...

    研磨设计模式-配套源代码.rar

    《研磨设计模式》是一本深入探讨软件设计模式的书籍,配套源代码是作者为了帮助读者更好地理解和应用书中介绍的设计模式而提供的实践示例。设计模式是软件开发中经过实践检验的、解决常见问题的模板,它为软件设计...

    研磨设计模式-配套源代码 UTF-8格式

    《研磨设计模式》是一本深入探讨软件设计原则与实践的经典书籍,其配套源代码提供了丰富的实例,帮助读者更好地理解和应用各种设计模式。这个UTF-8格式的压缩包包含了书中介绍的各种设计模式的实现,是学习和研究...

    研磨设计模式--chjavach的博客文章

    本文将深入探讨五个关键的设计模式:单例模式、工厂方法模式、策略模式、命令模式和桥接模式,这些都是Java编程中常用且至关重要的设计原则。 首先,我们来看**单例模式**。单例模式确保一个类只有一个实例,并提供...

    研磨设计模式-陈臣.epub

    “1.1 设计模式是什么 1.1.1 什么是模式 从字面上理解,模,就是模型、模板的意思;式,就是方式、方法的意思。综合起来,所谓模式就是:可以作为模型或模板的方式或方法。... “研磨设计模式”。 iBooks.

    研磨设计模式-陈臣.王斌.扫描高清版PDF

    设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;...

    研磨设计模式-陈臣pdf

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    研磨设计模式-陈臣.mobi kindle版

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    研磨设计模式书-配套源代码(全)

    1:本源代码是《研磨设计模式》一书的配套源代码 2:每个模式的示例源代码放在一个单独的文件夹下,以该模式的英文名称命名 3:每个模式下分成多个example,按照书的示例顺序分别命名为example1、example2.........

    研磨设计模式-part2

    完整清晰版,完美书签. 《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。...第24章 桥接模式(Bridge) 第25章 访问者模式(Visitor) 附录A常见面向对象设计原则 附录BUML简介 参考文献

    研磨设计模式-part4

    完整清晰版,完美书签. 《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。...第24章 桥接模式(Bridge) 第25章 访问者模式(Visitor) 附录A常见面向对象设计原则 附录BUML简介 参考文献

    研磨设计模式-part3

    完整清晰版,完美书签. 《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。...第24章 桥接模式(Bridge) 第25章 访问者模式(Visitor) 附录A常见面向对象设计原则 附录BUML简介 参考文献

    研磨设计模式源码

    《研磨设计模式源码》是一份非常宝贵的资源,它提供了设计模式的实践代码,帮助开发者深入理解并应用这些模式。设计模式是软件工程中经过长期实践总结出来的一套通用解决方案,它们描述了在特定场景下如何解决常见...

    设计模式Golang实现《研磨设计模式》读书笔记.zip

    设计模式Golang实现《研磨设计模式》读书笔记Go语言设计模式Go语言设计模式的实例代码创建模式工厂简单模式(Simple Factory)工厂方法模式(工厂方法)抽象工厂模式(Abstract Factory)创建者模式(Builder)原型...

    研磨设计模式 源代码

    《研磨设计模式》是一本深入探讨软件设计模式的经典书籍,源代码包含了书中所讲解的各种设计模式的实际应用示例。设计模式是软件工程中的重要概念,它们是经过反复验证、在特定情境下解决常见问题的有效解决方案。...

    研磨设计模式全部源代码

    这个压缩包“研磨设计模式全部源代码”包含了多种设计模式的实现,这些模式可以帮助开发者写出更可维护、可扩展和可复用的代码。下面将详细讲解其中可能包含的一些重要设计模式及其应用。 1. 工厂模式:这是最简单...

    研磨设计模式(完整带书签).part2.pdf

    本电子书一共两个压缩文档,本文件为part2. 《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以...第24章 桥接模式(Bridge) 第25章 访问者模式(Visitor) 附录A常见面向对象设计原则 附录BUML简介 参考文献

    研磨设计模式带书签完整版228M.7z.001

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    研磨设计模式 演示源代码

    8. **桥接模式**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。有助于降低复杂系统的耦合度。 9. **组合模式**:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合模式使得用户对单个对象...

Global site tag (gtag.js) - Google Analytics