设计模式-桥接模式

2024-06-12  本文已影响0人  灵台悠步
桥接模式

桥接模式(bridge)也成为桥梁模式,接口(Interface)模式,柄体(Handle And Body)模式,是将抽象部分与它的具体实现部分分离,使得它们可以独立的变化,属于结构型模式。
桥接模式主要是通过组合的方式建立两个类之间的关系,而不是继承。但又类似于多重继承方案,但是多重继承方案往往违背了的单一职责原则,其复用性比较差,桥接模式是比多重继承方案更好的替代方案。
桥接模式的核心在于解耦抽象和实现。
桥接模式主要包含四种角色

应用场景

举例:
平时工作中 我们发消息 可以通过手机发送,邮件发送,以及内部系统发送。消息级别可以是普通,加急,特急消息。

package com.jdwa.bridge;

public interface IMessage {
    void send(String message,String toUser);
}
package com.jdwa.bridge;

public class PhoneMessage implements IMessage {
    @Override
    public void send(String message, String toUser) {
        System.out.println(String.format("使用手机的方式发送消息 %s 给 %s",message,toUser));
    }
}
package com.jdwa.bridge;

public class EmailMessage implements IMessage {

    @Override
    public void send(String message, String toUser) {
        System.out.println(String.format("使用邮件的方式发送消息 %s 给 %s",message,toUser));
    }
}
package com.jdwa.bridge;

public class SystemMessage implements IMessage {
    @Override
    public void send(String message, String toUser) {
        System.out.println(String.format("使用内部系统的方式发送消息 %s 给 %s",message,toUser));
    }
}
package com.jdwa.bridge;

public abstract class AbstractMessage {
    private IMessage message;
    
    public AbstractMessage (IMessage message){
        this.message = message;
    }
    
    public void senMessage(String message,String toUser){
        this.message.send(message, toUser);
    }
}
package com.jdwa.bridge;

public class NomalMessage extends AbstractMessage{

    private IMessage message;

    public NomalMessage(IMessage message){
        super(message);
    }


    @Override
    public void senMessage(String message,String toUser){
        message = "【普通】"+message;
        super.senMessage(message, toUser);
    }


}
package com.jdwa.bridge;

public class UrgencyMessage extends AbstractMessage{
    public UrgencyMessage(IMessage message) {
        super(message);
    }

    @Override
    public void senMessage(String message,String toUser){
        message = "【加急】"+message;
        super.senMessage(message, toUser);
    }
}
package com.jdwa.bridge;

public class ExtraUrgency extends AbstractMessage {
    public ExtraUrgency(IMessage message) {
        super(message);
    }

    @Override
    public void senMessage(String message,String toUser){
        message = "【加急】"+message;
        super.senMessage(message, toUser);
    }
}
package com.jdwa.bridge;

public class Client {
    public static void main(String[] args) {
        IMessage message = new EmailMessage();
        AbstractMessage abstractMessage = new NomalMessage(message);
        abstractMessage.senMessage("加班申请","王总");

        IMessage message1 = new SystemMessage();
        AbstractMessage abstractMessage1 = new UrgencyMessage(message1);
        abstractMessage1.senMessage("请假","张总");

        IMessage message2 = new PhoneMessage();
        AbstractMessage abstractMessage2 = new ExtraUrgency(message2);
        abstractMessage2.senMessage("调休","陈总");

    }
}
使用邮件的方式发送消息 【普通】加班申请 给 王总
使用内部系统的方式发送消息 【加急】请假 给 张总
使用手机的方式发送消息 【加急】调休 给 陈总
上一篇 下一篇

猜你喜欢

热点阅读