zoukankan      html  css  js  c++  java
  • [设计模式]桥接模式

    1. 定义

      将抽象部分与它的实现部分分离,使它们可以都可以独立的变化。

    2. 类图

      

      Abstraction:抽象部分接口,通常在这个对象中,要维护一个实现部分的对象引用,抽象方法里面的方法,需要调用实现部分的对象来完成。

      RefinedAbstraction:扩展抽象部分的接口

      Implementor:实现部分接口

      ConcreteImplementor:具体实现Implementor的对象

    3. 实例

    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年2月9日 下午10:46:29
     */
    public abstract class AbstractMessage {
        protected IMessage msg;
        
        public AbstractMessage(IMessage msg) {
            this.msg = msg;
        }
        
        public abstract void sendMessage(String message, String user);
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年2月9日 下午10:50:56
     */
    public class CommonMessage extends AbstractMessage{
    
        public CommonMessage(IMessage msg) {
            super(msg);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void sendMessage(String message, String user) {
            // TODO Auto-generated method stub
            this.msg.send(message, user);
        }
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年2月9日 下午10:44:43
     */
    public interface IMessage {
        void send(String message, String user);
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年2月9日 下午10:50:07
     */
    public class MessageEmail implements IMessage{
    
        @Override
        public void send(String message, String user) {
            // TODO Auto-generated method stub
            System.out.println("使用邮件方式发信息<" + message + ">给 " + user);
        }
    
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年2月9日 下午10:59:10
     */
    public class MessagePhone implements IMessage{
    
        @Override
        public void send(String message, String user) {
            // TODO Auto-generated method stub
            System.out.println("使用手机方式发信息<" + message + ">给 " + user);
        }
    
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年2月9日 下午10:48:23
     */
    public class MessageSMS implements IMessage{
    
        @Override
        public void send(String message, String user) {
            // TODO Auto-generated method stub
            System.out.println("使用站内短消息方式发信息<" + message + ">给 " + user);
        }
    
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年2月9日 下午10:59:50
     */
    public class SpecialUrgencyMessage extends AbstractMessage{
    
        public SpecialUrgencyMessage(IMessage msg) {
            super(msg);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void sendMessage(String message, String user) {
            // TODO Auto-generated method stub
            System.out.println("十万火急!");
            this.msg.send(message, user);
        }
    
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年2月9日 下午10:52:14
     */
    public class UrgencyMessage extends AbstractMessage{
    
        public UrgencyMessage(IMessage msg) {
            super(msg);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void sendMessage(String message, String user) {
            // TODO Auto-generated method stub
            System.out.println("紧急信息");
            this.msg.send(message, user);
            this.warning();
        }
    
        private void warning() {
            // TODO Auto-generated method stub
            System.out.println("请尽快处理");
        }
    
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年2月9日 下午10:54:10
     */
    public class Client {
        public static void main(String[] args) {
            IMessage sms = new MessageSMS();
            IMessage email = new MessageEmail();
            IMessage phone = new MessagePhone();
            
            AbstractMessage commonMessage = new CommonMessage(sms);
            commonMessage.sendMessage("请于明天上午9点在花果山集合", "猪八戒");
            
            AbstractMessage urgencyMessage = new UrgencyMessage(email);
            urgencyMessage.sendMessage("附近有妖怪,悟空", "悟空");
            
            AbstractMessage specialUrgencyMessage = new SpecialUrgencyMessage(phone);
            specialUrgencyMessage.sendMessage("师傅被妖怪抓走了!", "大师兄");
        }
    }

    4. 什么是桥接

      所谓桥接,通俗的讲就是在不同的东西之间塔一座桥,让它们能够连接起来,可以相互通信和使用。

    5. 桥接的优点

      a. 分离抽象和实现部分

      b. 更好的扩展性

      c. 可动态的切换实现

      d. 减少子类的数量

      

  • 相关阅读:
    2019 安装SSDT
    添加删除服务
    POWER BI 报表服务器搭建配置
    解决POWER BI权限控制问题
    asp.net core 发布后显示异常错误信息的方法
    Microsoft SQL Server 查询连接数和关闭连接数
    不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况
    SQL Server在所有表中查找内容(在整个库搜索内容)
    IIS 在.NET MVC网站下创建多个子应用程序,子站访问根目录问题
    博客网址
  • 原文地址:https://www.cnblogs.com/jerry19890622/p/4333823.html
Copyright © 2011-2022 走看看