设计模式之桥接模式

桥接模式bridge

在学习桥接模式之前我们先来回顾以下以前的知识

开闭原则(OCP)

对扩展开放。模块对扩展开放,就意味着需求变化时,可以对模块扩展,使其具有满足那些改变的新行为。换句话说,模块通过扩展的方式去应对需求的变化。

对修改关闭。模块对修改关闭,表示当需求变化时,关闭对模块源代码的修改,当然这里的“关闭”应该是尽可能不修改的意思,也就是说,应该尽量在不修改源代码的基础上面扩展组件。

组合聚合复用原则(CARP)

尽量使用对象组合,而不是继承来达到复用的目的。就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。简而言之,要尽量使用合成/聚合,尽量不要使用继承。

脱耦

抽象化和实现化之间使用组合聚合关系而不是继承关系

 

什么是桥接模式?

桥接模式是一种结构型设计模式。Bridge模式基于类的最小设计原则,通过使用封装、聚合、以及继承等行为让不同的类承担不同的职责。主要特点是把抽象与行为实现分开来,从而保持各部分的独立性以及对应他们的功能扩展。

 

Uml图以及角色分析

 

抽象化等级结构与实现化等级结构

单向桥:只能是抽象化部分的对象去使用具体实现部分的对象。

抽象类(Abstraction)

抽象类接口(接口这货抽象类)维护队行为实现(implementation)的引用。它的角色就是桥接类。

Implementor

行为实现类接口(Abstraction接口定义了基于Implementor接口的更高层次的操作)

基本代码:

使用邮件、手机、站内等多种方式实现发送普通消息、加急消息、特级消息。

public interface MessageImplementor{                //实现接口
public void send(String message,String toUser);
}

public  abstract class AbsteactMessage{
proctected MessageImplementor impl;         //单向桥抽象部分使用实现部分

public AbsteactMessage(MessageImplementor impl){
impl=this.impl;
}
//发送消息,转调实现部分的方法
public void senfMessage(String message,String toUser){
this.impl.send(message,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("使用Email的方式,发送消息'"   
                               +message+"'给"+toUser);    
    }    
}
                                                        //手机发送
public  class MessageMobile implements MessageImplementor{    
    public void send(String message, String toUser) {    
        System.out.println("使用手机短消息的方式,发送消息'"   
+message+"'给"+toUser);    
    }    
}

                                                     //抽象普通消息
public class CommonMessage extends AbstractMessage{    
    public CommonMessage(MessageImplementor impl) {    
        super(impl);    
    }    
    public void sendMessage(String message, String toUser) {    
        super.sendMessage(message, toUser);    
    }       
}  
                                                    //抽象加急消息

public class UrgencyMessage extends AbstractMessage{    
    public UrgencyMessage(MessageImplementor impl) {    
        super(impl);    
    }    
    public void sendMessage(String message, String toUser) {    
        message = "加急:"+message;    
        super.sendMessage(message, toUser);    
    }    
    public Object watch(String messageId) {       //监控方法
        return null;    
    }       
}  

本质:分离抽象和实现

应用场景:

不希望在抽象和实现部分采用固定的绑定关系;抽象和实现部分都应该可以扩展的情况;

许多子类继承的情况;

优点:分离抽象部分和实现部分,使彼此相互独立,变化不会相互影响

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯智能台灯

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值