设计模式入门之桥接模式Bridge

//桥接模式定义:将抽象部分与它的实现部分分离,使得他们都可以独立地变化
//广义来讲,桥接模式非常普遍,面向抽象编程,面向接口编程就可以看作是他的体现
//实例:一个系统,要按照不同的要求发信息(普通,加急,特急),而且还要以不同的方式发送(站内信,Email,短信)等,考虑到其扩展性,用桥接模式再合适不过了
//上代码
//桥接的一半---抽象部分
public abstract class AbstractionMessage {
	protected MessageImplementor impl;
	public AbstractMessage(MessageImplementor impl) {
		this.impl = impl;
	}
	public void sendMessage(String message, String toUser) {
		this.impl.send(message, toUser);
	}
}
//发送消息的统一接口,即桥接的另一半---实现的接口
public interface MessageImplementor {
	public void send(String message, String toUser);
}
//桥接的另一半---实现
public class MessageSMS implements MessageImplementor {
	public void send(String message,String toUser) {
		System.out.println("使用站内信方式,发送消息‘"+message+"‘给"+toUser);
	}
}
//桥接的另一半---实现
public class MessageEmail implements MessageImplementor {
	public void send(String message,String toUser) {
		System.out.println("使用邮件方式,发送消息‘"+message+"‘给"+toUser);
	}
}
//普通消息
public class CommonMessage extends AbstractionMessage {
	public CommonMessage(MessageImplementor impl) {
		super(impl);
	}
	public void sendMessage(String message, String toUser) {
		super.sendMessage(message, toUser);
	}
}
//加急消息
public class UrgencyMessage extends AbstractionMessage {
	public UrgencyMessage(MessageImplementor impl) {
		super(impl);
	}
	public void sendMessage(String message, String toUser) {
		super.sendMessage(message, toUser);
	}
	public Object watch(String messageId) {
		return null;//获取相应的数据,组织成监控的对象,然后返回
	}
}
//客户端测试类
public class Client {
	public static void main(String[] args) {
		MessageImplementor impl = new MessageSMS();
		AbstractionMessage m = new CommonMessage(impl);
		m.sendMessage("测试", "小李");

		MessageImplementor impl2 = new MessageEmail();
		AbstractionMessage m2 = new UrgencyMesssage(impl2);
		m2.sendMessage("测试", "小李");
	}
}
//从客户端的调用可以看出来,不管是要增加消息类型还是发送消息的方式,完全是件非常简单的事情,因为没有耦合,扩展起来非常轻松。
//关于谁来桥接
//1.由抽象部分的对象自己来创建相应的Implementor对象,根据参数判断具体创建哪个
//2.在Abstraction中创建默认的Implementor对象,如果需要,让子类来修改
//3.使用抽象工厂或简单工厂
//4.使用IoC/DI方式
//Java中的JDBC就是非常典型的桥接应用
//桥接模式的本质:分离抽象和实现
//桥接模式很好地提现了开闭原则OCP
//优点:
//1.分离抽象和实现部分
//2.更好的扩展性
//3.可动态地切换实现
//4.减少子类的个数
//使用桥接模式的场景
//1.如果你不希望在抽象部分和实现部分采用固定的绑定关系,可以采用桥接模式
//2.如果出现抽象部分和实现部分都能够扩展的情况,可以采用桥接模式
//3.如果希望实现部分的修改不会对客户产生影响,可以采用桥接模式
//4.如果采用继承的实现方案,会导致产生很多子类,对于这种情况,也可采取桥接模式

设计模式入门之桥接模式Bridge

时间: 2024-10-03 23:53:59

设计模式入门之桥接模式Bridge的相关文章

设计模式之【桥接模式--Bridge】

桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化.桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了;

如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)

如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往文中插入几个表情的趋势了, 但是你真的插的姿势对了吗?这种事情不是随便插的,来来来,给你 见识下如何在适当的场景插入适当的表情以让读者感觉到易可赛艇, 本文以讲故事插表情为主,讲述桥接模式为辅,多图预警, 简书上排版可能有些问题,最佳排版可见: https://www.zybuluo.com/coder-pig/note

【设计模式】桥接模式 Bridge Pattern

开篇还是引用吕振宇老师的那篇经典的文章<设计模式随笔-蜡笔与毛笔的故事>.这个真是太经典了,没有比这个例子能更好的阐明桥接模式了,这里我就直接盗来用了. 现在市面上卖的蜡笔很多,各种型号,各种颜色种类繁多, 假如一盒蜡笔有24种颜色,那么它能涂抹出24种不同的颜色来,蜡笔型号是固定的,如果想画出各种线条那么就要购买不同型号的蜡笔,假如我们要涂抹出粗,中,细三种线条,那么我们就要买3盒粗,中,细型号的蜡笔才能满足需求,那么就是3盒*24色=72只蜡笔.假如使用毛笔来作画,我们需要准备3只粗,中,

二十四种设计模式:桥接模式(Bridge Pattern)

桥接模式(Bridge Pattern) 介绍将抽象部分与它的实现部分分离,使它们都可以独立地变化. 示例有一个Message实体类,对它的操作有Insert()和Get()方法,现在使这些操作的抽象部分和实现部分分离. MessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Bridge { /// <summary> /// Message实体类 //

Java设计模式系列之桥接模式

桥接模式(Bridge)的定义 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?这就要使用桥接模式 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 桥接模式(Bridge)的动机 当一种抽象类型可能有多种实现方式时,一般情况我们可以考虑使用继承来解决抽象类型的多种实现,在抽象类型中定义接口,而子类负责接口的具体实现.但这种做法缺乏灵活性,由于抽象类型和子类之间紧紧地绑定在一起,使得这种关系在运行时不能再修改,这使得它难以修改.扩展和重用

桥接模式&lt;Bridge&gt;

概述 将抽象部分(Abstraction)与实现部分(Implementor)分离,使它们可以独立地变化. 解决 在软件系统中,有些类型由于自身的逻辑,它具有两个或多个维度的变化.为了解决这种多维度变化,又不引入复杂度,这就要使用Bridge模式. 角色 抽象(Abstraction):定义抽象接口,该接口中包含(保持)实现具体行为.具体特征的实现(Implementor)接口. 提炼的抽象(RefinedAbstraction):继承自Abstraction的子类,依旧是一个抽象的事物名. 实

设计模式入门之访问者模式Visitor

Set集合的配置 数据表的创建:表关系一个员工拥有多个身份 create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL, salary INT default NULL, PRIMARY KEY (id) ); create table CERTIFICATE ( id INT NOT NULL aut

桥接模式(bridge结构模式)c#

桥接模式(bridge结构模式)c#简单例子 在前面的玩家中每增加一个行为,就必须在每个玩家中都增加,通过桥接模式将行为提取出来了,减少变化 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo

设计模式入门之备忘录模式Memento

//备忘录模式定义: //在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态. //这样以后就可以将该对象恢复到原先保存的状态 //实例:测试两种方案,两种方案在第一阶段的过程是相同的,第二阶段是不同的 //实例代码 //备忘录对象的窄接口 public interface FlowAMockMemento { //空的,所谓窄接口,即只是一个标识作用,它的持有者不可以调用任何它的方法 } //测试流程类 public class FlowAMock { private