zoukankan      html  css  js  c++  java
  • 桥模式设计模式进入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.假设採在实现继承。它会导致许多子类,对于这样的情况,还拿桥接模式

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

  • 相关阅读:
    vue滑块拖拽校验
    vue和原生自动聚焦
    vue实现bar左右拖拽
    fastclick插件使用
    三大家族易忘点和案例
    移动端调试工具chrome+devtools
    restful 与 webapi 详解
    .NET Core 中依赖注入框架详解 Autofac
    .NET Core 对象( Transient、Scope、Singleton )生命周期详解 (对象创建以及释放)
    C# 通过DataSet 获取SQL 存储过程返回的多个结果集(tables)
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4617644.html
Copyright © 2011-2022 走看看