【设计模式】-桥接模式

定义

将抽象部分与实现部分分离,使它们都可以独立的变化。

举个栗子–发消息(只讨论emil、手机短信、普通消息、加息消息四种组合)

直接上代码

/**
 * 消息接口
 */
public interface MessageInterFace {
    public void send(String msg, String toUser);
}
/**
 * email发消息
 */
public class MessageEmail implements MessageInterFace {
    @Override
    public void send(String msg, String toUser) {
        System.out.println("使用"+""+"email--"+"发送信息:"+msg+"--给"+"--"+toUser);
    }
}

/**
 * phone发消息
 */
public class MessagePhone implements MessageInterFace{
    @Override
    public void send(String msg, String toUser) {
        System.out.println("使用"+""+"手机短信--"+"发送信息:"+msg+"--给"+"--"+toUser);
    }
}
/**
 * 抽象消息对象
 */
public class AbstractMessage {

    private MessageInterFace messageInterFace;

    public AbstractMessage(MessageInterFace messageInterFace) {
        this.messageInterFace = messageInterFace;
    }

    public void send(String msg, String toUser) {
        messageInterFace.send(msg, toUser);
    }
}

/**
 * 普通消息--不做处理
 */
public class MessageCommon extends AbstractMessage {

    public MessageCommon(MessageInterFace messageInterFace) {
        super(messageInterFace);
    }

    @Override
    public void send(String msg, String toUser) {
        msg="(普通消息)"+msg;
        super.send(msg, toUser);
    }
}
/**
 * 紧急消息
 */
public class MessageUrgent extends AbstractMessage {

    public MessageUrgent(MessageInterFace messageInterFace) {
        super(messageInterFace);
    }

    @Override
    public void send(String msg, String toUser) {
        msg="(加急)"+msg;
        super.send(msg, toUser);
    }
}

测试

	@Test
	void bridgeTest(){
		//普通短信消息
		MessageCommon messageCommonPhone = new MessageCommon(new MessagePhone());
		messageCommonPhone.send("干什么呢","喜洋洋");

		//普通email信息
		MessageCommon messageCommonEmail = new MessageCommon(new MessageEmail());
		messageCommonEmail.send("干什么呢","喜洋洋");

		//加急短信消息
		MessageUrgent messageUrgentPhone = new MessageUrgent(new MessagePhone());
		messageUrgentPhone.send("干什么呢","喜洋洋");

		//加急email消息
		MessageUrgent messageUrgentEmail = new MessageUrgent(new MessageEmail());
		messageUrgentEmail.send("干什么呢","喜洋洋");
	}
使用手机短信--发送信息:(普通消息)干什么呢--给--喜洋洋
使用email--发送信息:(普通消息)干什么呢--给--喜洋洋
使用手机短信--发送信息:(加急)干什么呢--给--喜洋洋
使用email--发送信息:(加急)干什么呢--给--喜洋洋

小结

1.本案例的桥接点在抽象类中直接持有信息接口的实现,通过消息类型与发送方式的组合实现桥接模式。
2.对于两个独立变化的维度(描述/区分对象的维度),使用桥接模式再适合不过了。
3.本质:分离抽象与实现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值