桥模式设计模式进入Bridge

桥模式设计模式进入Bridge

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

桥模式设计模式进入Bridge

Abstraction:抽象部分的父类,定义须要实现的接口。

维护对实现部分的引用,从而把实现桥接到Implementor中去

Implementor:实现部分的接口

RefinedAbstraction:扩展抽象部分的接口

ConcreteImplementorA/B:真正实现Implementor接口的对象

//桥接模式定义:将抽象部分与它的实现部分分离,使得他们都能够独立地变化。抽象部分仅仅定义出须要实现什么方法(非抽象方法),相当于仅仅给出一个方法的接口,接口中去调用桥接过来的详细实现类去实现,从而实现灵活的扩展性
//广义来讲,桥接模式很普遍,面向抽象编程,面向接口编程就能够看作是他的体现
//实例:一个系统,要依照不同的要求发信息(普通。加急,特急),并且还要以不同的方式发送(站内信,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;//获取对应的数据。组织成监控的对象。然后返回
	}
}
//client測试类
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("測试", "小李");
	}
}
//从client的调用能够看出来。无论是要添加消息类型还是发送消息的方式,全然是件很easy的事情。由于没有耦合,扩展起来很轻松。
//关于谁来桥接
//1.由抽象部分的对象自己来创建对应的Implementor对象。依据參数推断详细创建哪个
//2.在Abstraction中创建默认的Implementor对象,假设须要,让子类来改动
//3.使用抽象工厂或简单工厂
//4.使用IoC/DI方式
//Java中的JDBC就是很典型的桥接应用
//桥接模式的本质:分离抽象和实现
//桥接模式很好地提现了开闭原则OCP
//长处:
//1.分离抽象和实现部分
//2.更好的扩展性
//3.可动态地切换实现
//4.降低子类的个数
//使用桥接模式的场景
//1.假设你不希望在抽象部分和实现部分採用固定的绑定关系,能够採用桥接模式
//2.假设出现抽象部分和实现部分都能够扩展的情况,能够採用桥接模式
//3.假设希望实现部分的改动不会对客户产生影响。能够採用桥接模式
//4.假设採在实现继承。它会导致许多子类,对于这样的情况,还拿桥接模式

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117678.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java设计模式之迭代子模式

    本文继续介绍23种设计模式系列之观察者模式。定义在软件构建过程中,集合对象内部结构常常变化各异,但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为同一种算法在多种集合对象上进行操作提供了可能。使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方式。迭代子(Iterator)模式又叫游标

    2022年3月11日
    35
  • 设计模式(一)工厂模式Factory(创建类型)

    设计模式(一)工厂模式Factory(创建类型)

    2021年12月31日
    52
  • 装饰设计模式

    装饰设计模式就是对已有的对象的功能进行增强简单小例子:我们考虑一下使用继承也可以对父类中的功能进行增强只需要调用super就可以调用父类的方法,那使用装饰和继承有什么区别?使用继承体系就会有点臃肿

    2021年12月22日
    44
  • GOF23—工厂设计模式练习代码和随笔

    GOF23—工厂设计模式练习代码和随笔

    2021年7月13日
    89
  • 设计模式之代理模式、适配器模式和外观模式

    编写基于另一组类的包装器接口是一项常见的API设计任务,例如,你的工作可能是维护一个大型的遗留代码库,相比重构所有代码,你更愿意审计一个新的,更简洁的API,以隐藏所有的底层遗留代码;或者你可能已经

    2021年12月19日
    48
  • visitor设计模式ppt_常用的设计模式

    visitor设计模式ppt_常用的设计模式动机Visitor是访问者的意思。数据结构中保存着元素。一般我们需要对元素进行处理,那么处理元素的代码放在哪里呢?最显然的方法就是放在数据结构的类中,在类中添加处理的方法。但是如果有很多处理,就比较麻烦了,每当增加一种处理,我们就不得不去修改表示数据结构的类。visitor模式就是用来解决这个问题的,visitor模式将数据结构的定义和处理分离开。也就是会新增一个访问者的类,将数据元素的处理交给访问者类,这样以后要新增处理的时候,只需要新增访问者就可以了。模式定义将更新(变更)封装到一个类中(访问

    2022年8月8日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号