• 设计模式学习总结(十一)--桥接模式


    定义

    桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

    桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。

    包含角色:

    • Abstraction:抽象类
    • RefinedAbstraction:扩充抽象类
    • Implementor:实现类接口
    • ConcreteImplementor:具体实现类

    优缺点

    优点:

    • 分离抽象接口及其实现部分。提高了比继承更好的解决方案。
    • 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
    • 实现细节对客户透明,可以对用户隐藏实现细节。

    缺点:

    • 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
    • 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

    实例

    OA 系统中流程传递需要发送消息提醒用户,消息的级别也有普通、紧急区分。
    发送方式有邮件、短信等。
    

    消息发送接口:

    public interface IMessageImplementor {
        void send(String toUser, String message);
    }
    

    消息发送实现类:

    public class MessageSMS implements IMessageImplementor {
        @Override
        public void send(String toUser, String message) {
            System.out.println(String.format("短信发送至:%s内容为:%S",toUser,message));
        }
    }
    
    public class MessageEmail implements IMessageImplementor {
        @Override
        public void send(String toUser, String message) {
            System.out.println(String.format("邮件发送至:%s内容为:%S",toUser,message));
        }
    }
    

    消息抽象类:

    public abstract class AbstractMessage {
    
        private IMessageImplementor implementor;
    
        public AbstractMessage(IMessageImplementor implementor){
            this.implementor = implementor;
        }
    
        public void sendMessage(String toUser , String message){
            this.implementor.send(toUser,message);
        }
    
    }
    

    实际消息类:

    
    public class CommonMessage extends AbstractMessage{
    
        public CommonMessage(IMessageImplementor implementor) {
            super(implementor);
        }
    }
    
    public class UrgentMessage extends AbstractMessage{
    
        public UrgentMessage(IMessageImplementor implementor) {
            super(implementor);
        }
    
        @Override
        public void sendMessage(String toUser, String message) {
            // 实现紧急消息自己的逻辑
            String urgentMessage = "紧急:"+message;
            super.sendMessage(toUser, urgentMessage);
        }
    }
    

    调用:

    public static void main(String[] args) {
        IMessageImplementor messageSMS = new MessageSMS();
        IMessageImplementor messageEmail = new MessageEmail();
        // 普通消息 + 邮件发送
        AbstractMessage commonMessage1 = new CommonMessage(messageEmail);
        commonMessage1.sendMessage("MarkLogZhu","test");
        
        // 普通消息 + 短信发送
        AbstractMessage commonMessage2 = new CommonMessage(messageSMS);
        commonMessage2.sendMessage("MarkLogZhu","test");
        
        // 紧急消息 + 邮件发送
        AbstractMessage urgentMessage1 = new UrgentMessage(messageEmail);
        urgentMessage1.sendMessage("MarkLogZhu","test");
        
        // 紧急消息 + 短信发送
        AbstractMessage urgentMessage2 = new UrgentMessage(messageSMS);
        urgentMessage2.sendMessage("MarkLogZhu","test");
    }
    

    控制台输出:

    邮件发送至:MarkLogZhu内容为:TEST
    短信发送至:MarkLogZhu内容为:TEST
    邮件发送至:MarkLogZhu内容为:紧急:TEST
    短信发送至:MarkLogZhu内容为:紧急:TEST
    
  • 相关阅读:
    python每隔半个小时执行一次实现思维
    计算机网络毕业论文3000字,给学弟做的作业
    计算机毕业论文总结_计算机应用毕业论文
    计算机毕业论文8000字_计算机应用毕业论文
    计算机专业论文3000字_计算机毕业论文8000字
    java浏览器_java游戏网站
    python定时器_python倒计时代码
    javascript语法基础_java教程
    javascript开发自学_没有基础的人学js
    JAVA怎么实现软件和驱动下载
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/11582591.html
Copyright © 2020-2023  润新知