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. 减少子类的数量

      

  • 相关阅读:
    Java UDP通信简单实现
    为什么要阅读——兼分享《首先,打破一切常规》[中译文]:世界顶级管理者的成功秘诀/(美)马库斯&#183;白金汉,(美)柯特&#183;科夫曼 著
    怎样提高团队管理能力9
    POJ2777 Count Color 线段树区间更新
    Swift和Objective-C混合编程——Swift调用OC
    LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    ZZUOJ-1195-OS Job Scheduling(郑州大学第七届ACM大学生程序设计竞赛E题)
    CentOS出错You don&#39;t have permission to access on this server
    string 和 vector 初探
    ICMP报文类型
  • 原文地址:https://www.cnblogs.com/jerry19890622/p/4333823.html
Copyright © 2011-2022 走看看