首页 > 其他 > 详细

[设计模式]桥接模式

时间:2015-03-12 22:12:28      阅读:316      评论:0      收藏:0      [点我收藏+]

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

  

[设计模式]桥接模式

原文:http://www.cnblogs.com/jerry19890622/p/4333823.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!