Java设计模式——桥连模式

桥接模式简单来说就是通过将抽象部分和具体部分分离,使它们可以独立地变化。如果你的一个类存在多个变化维度(如抽象和具体的实现)。若使用继承来处理这些变化,将会导致类层次结构的急剧增加,难以管理和维护。并且,继承会将抽象部分和具体部分紧密耦合,不利于独立地进行扩展和变化。此时不妨考虑使用桥连模式。

假定一个不同的级别信息发送方式的例子

/**
 * 抽象消息
 */
public interface IMessage {
    void send(String message,String addressee);
}


/**
 * 抽象消息类
 */
public abstract class AbstractMessage {
    protected IMessage iMessage;

    public AbstractMessage(IMessage iMessage) {
        this.iMessage = iMessage;
    }

    public void sendMessage(String message, String addressee) {
        iMessage.send(message, addressee);
    }
}


/**
 * 短信消息
 */
public class SmsMessage implements IMessage{
    @Override
    public void send(String message, String addressee) {
        System.out.println("公司专用短息 -> " + message + ",收件人 -> " + addressee);
    }
}


/**
 * 邮件消息
 */
public class EmailMessage implements IMessage {
    @Override
    public void send(String message, String addressee) {
        System.out.println("企业邮箱发送邮件 -> " + message + ",收件人 -> " + addressee);
    }
}


/**
 * 普通消息
 */
public class NormalMessage extends AbstractMessage{
    public NormalMessage(IMessage iMessage) {
        super(iMessage);
    }

    @Override
    public void sendMessage(String message, String addressee) {
        //普通消息直接调用父类方法
        super.sendMessage(message, addressee);
    }
}


/**
 * 紧急消息
 */
public class UrgentMessage extends AbstractMessage {
    public UrgentMessage(IMessage iMessage) {
        super(iMessage);
    }

    @Override
    public void sendMessage(String message, String addressee) {
        message = "紧急通知 :" + message;
        super.sendMessage(message, addressee);
        //模拟特殊处理...
    }
}

编写测试用例

    /**
     * 桥连器模式-消息桥连测试
     */
    @Test
    public void testMessageBridge() {
        IMessage message = new SmsMessage();
        AbstractMessage abstractMessage = new NormalMessage(message);
        abstractMessage.sendMessage("放假通知,即日起连休三天!", "全体员工");

        message = new EmailMessage();
        abstractMessage = new UrgentMessage(message);
        abstractMessage.sendMessage("出现生产问题,请尽快处理!", "王经理");
    }

你可能感兴趣的:(Java概要,设计模式,java)