码迷,mamicode.com
首页 > 编程语言 > 详细

java设计模式(九)——桥接模式

时间:2020-07-09 12:27:51      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:action   public   灵活   ace   微信   扩展   static   java设计   建立   

 

适配器模式( Adapter Pattern )又叫做变压器模式,它的功能是将一个类的接口变成客户端所期望
的另一种接口,从而使原本因接口不匹配而导致无法在一起工作的两个类能够-起工作 ,属于结构型设
计模式。

桥接模式的目的主要是通过组合而不是继承建立两个类之间的关系。

类图:

技术图片

 

 

 基本角色:

接口:IImplementor,实现维度的基本操作,

具体实现:ConcreteImplementor,实现维度的具体操作

抽象/桥:Abstraction,持有IImplementor接口,一般是抽象类

修正抽象:继承自Abstraction,对Abstraction的方法进行完善。

 

使用场景:

1、在抽象和具体实现之间需要增加更多的灵活性的场景。
2、 一个类存在多个独立变化的维度,而这多个维度都需要独立进行扩展。
 

生活实例:桥梁,物理机与虚拟机的网络桥接连接

案例:

生活中,我们会受到来qq,微信,钉钉等途径的消息,我们将这些信息进行分类:同学发来的信息,同事发来的信息,客户发来的信息

这两个维度,我们使用桥来建立联系:

技术图片

 

类图:

技术图片

 

 

 接口:Imessage 

public interface Imessage {

    void send(String msg,String to);
}

其实现类:QqMessage 

public class QqMessage implements Imessage  {
    @Override
    public void send(String msg, String to) {
        System.out.printf("qq消息》》%s,%s \n",msg,to);
    }
}

其实现类:WechatMessage 

public class WechatMessage implements Imessage {
    @Override
    public void send(String msg, String to) {
        System.out.printf("微信消息》》%s,%s \n",msg,to);
    }
}

其实现类:DingdingMessage 

public class DingdingMessage implements Imessage {
    @Override
    public void send(String msg, String to) {
        System.out.printf("钉钉消息》》%s,%s \n",msg,to);
    }
}

 

抽象/桥:AbstractMessageBridge ,持有接口对象的具体实现

public class AbstractMessageBridge implements Imessage{

    public Imessage imessage;

    public AbstractMessageBridge(Imessage imessage){
        this.imessage = imessage;
    }
    @Override
    public void send(String msg, String to) {
        imessage.send(msg,to);
    }
}

修正抽象:ClassmateMessage 

public class ClassmateMessage extends AbstractMessageBridge{

    public ClassmateMessage(Imessage imessage) {
        super(imessage);
    }

    @Override
    public void send(String msg, String to) {

            msg = "同学信息:" + msg ;
            super.send(msg,to);
            record();
    }

    public void  record(){
        String content = "同学肯定没问题";
    }
}

修正抽象:ColleagueMessage 

public class ColleagueMessage extends AbstractMessageBridge {
    public ColleagueMessage(Imessage imessage) {
        super(imessage);
    }

    @Override
    public void send(String msg, String to) {
        msg = "同事信息:" + msg ;
        super.send(msg,to);
        record();
    }

    public void  record(){
        String content = "我想想";
    }
}

修正抽象:CustomerMessage 

public class CustomerMessage extends AbstractMessageBridge{
    public CustomerMessage(Imessage imessage) {
        super(imessage);
    }

    @Override
    public void send(String msg, String to) {
        msg = "客户信息:" + msg ;
        super.send(msg,to);
        record();
    }

    public void  record(){
        String content = "woc";
    }
}

测试:

public class Test {
    public static void main(String[] args) {

        QqMessage qqMessage = new QqMessage();
        WechatMessage wechatMessage = new WechatMessage();
        DingdingMessage dingdingMessage = new DingdingMessage();

        AbstractMessageBridge abstractMessageBridge = new ClassmateMessage(qqMessage);
        AbstractMessageBridge abstractMessageBridge2 = new ClassmateMessage(wechatMessage);
        AbstractMessageBridge abstractMessageBridge3 = new ClassmateMessage(dingdingMessage);

        abstractMessageBridge.send("借我钱","小王");
        abstractMessageBridge2.send("借我钱","小王");
        abstractMessageBridge3.send("借我钱","小王");
    }
}

输出:

qq消息》》同学信息:借我钱,小王 
微信消息》》同学信息:借我钱,小王 
钉钉消息》》同学信息:借我钱,小王

如果我们需要再建立一个信息途径,比如抖音信息,我们只需要写一个扩展即可。

public class DouyinMessage implements Imessage {
    @Override
    public void send(String msg, String to) {
        System.out.printf("抖音消息》》%s,%s \n",msg,to);
    }
}

优点:

提高了系统的扩展性,也符合开闭原则。

java设计模式(九)——桥接模式

标签:action   public   灵活   ace   微信   扩展   static   java设计   建立   

原文地址:https://www.cnblogs.com/tdyang/p/13272719.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!