软件编程
位置:首页>> 软件编程>> java编程>> Java设计模式之桥接模式的示例详解

Java设计模式之桥接模式的示例详解

作者:温故知新之java  发布时间:2023-10-03 21:56:00 

标签:Java,设计模式,桥接模式

定义

桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。

案例

需求

通过企业微信和qq的方式给员工发送消息

方案一

定义发送消息的接口

/**
* 发送消息的接口
* @author:liyajie
* @createTime:2022/2/21 10:33
* @version:1.0
*/
public interface AbstractSendMsgService {
   // 发送消息
   public void sendMsg();
}

定义普通消息接口

/**
* 普通消息接口
* @author:liyajie
* @createTime:2022/2/21 11:32
* @version:1.0
*/
public interface CommonMsg extends AbstractSendMsgService{

}

定义微信消息实现类

/**
* 发送消息的实现接口
* @author:liyajie
* @createTime:2022/2/21 10:35
* @version:1.0
*/
public class WxMsgServiceImpl implements CommonMsg{
   @Override
   public void sendMsg() {
       System.out.println("老板使用微信给你发了消息,快去接收吧");
   }
}

定义QQ消息实现类

/**
* 发送消息的实现接口
* @author:liyajie
* @createTime:2022/2/21 10:35
* @version:1.0
*/
public class QqMsgServiceImpl implements CommonMsg{
   @Override
   public void sendMsg() {
       System.out.println("老板使用QQ给你发了消息,快去接收吧");
   }
}

定义测试类

/**
* 测试类
* @author:liyajie
* @createTime:2022/2/21 10:37
* @version:1.0
*/
public class Test {
   public static void main(String[] args) {
       new WxMsgServiceImpl().sendMsg();
       new QqMsgServiceImpl().sendMsg();
   }
}

测试结果

Java设计模式之桥接模式的示例详解

方案二

定义发送消息抽象接口

/**
* 发送消息的抽象接口
* @author:liyajie
* @createTime:2022/2/21 10:33
* @version:1.0
*/
public abstract class NewAbstractSendMsgService {

protected SendMsgImplementor sendMsgImplementor;

public NewAbstractSendMsgService(SendMsgImplementor sendMsgImplementor){
       this.sendMsgImplementor = sendMsgImplementor;
   }

// 微信
   public void sendMsg(){
       this.sendMsgImplementor.sendMsg();
   }
}

定义发送消息实现类

/**
* 发送消息的实现接口
* @author:liyajie
* @createTime:2022/2/21 10:35
* @version:1.0
*/
public class NewSendMsgServiceImpl extends NewAbstractSendMsgService{

public NewSendMsgServiceImpl(SendMsgImplementor sendMsgImplementor) {
       super(sendMsgImplementor);
   }

@Override
   public void sendMsg() {
       super.sendMsg();
   }
}

定义发送消息统一接口

/**
* 发送消息统一接口
* @author:liyajie
* @createTime:2022/2/21 10:41
* @version:1.0
*/
public interface SendMsgImplementor {

void sendMsg();
}

定义微信发送消息实现类

/**
* 微信发送消息
* @author:liyajie
* @createTime:2022/2/21 10:45
* @version:1.0
*/
public class WxImplementor implements SendMsgImplementor{
   @Override
   public void sendMsg() {
       System.out.println("老板使用微信给你发了消息,快去接收吧");
   }
}

定义QQ发送消息实现类

/**
* QQ发送消息
* @author:liyajie
* @createTime:2022/2/21 10:45
* @version:1.0
*/
public class QqImplementor implements SendMsgImplementor{
   @Override
   public void sendMsg() {
       System.out.println("老板使用QQ给你发了消息,快去接收吧");
   }
}

定义测试类

/**
* 测试类
* @author:liyajie
* @createTime:2022/2/21 10:37
* @version:1.0
*/
public class TestNew {
   public static void main(String[] args) {
       NewSendMsgServiceImpl newSendMsgService = new NewSendMsgServiceImpl(new QqImplementor());
       newSendMsgService.sendMsg();

NewSendMsgServiceImpl newSendMsgService2 = new NewSendMsgServiceImpl(new WxImplementor());
       newSendMsgService2.sendMsg();
   }
}

测试结果

Java设计模式之桥接模式的示例详解

对比分析

方案一,即一般实现方式,微信和QQ两种发送消息的方式需要同时去实现CommonMsg和AbstractSendMsgService两个接口中的方法,耦合性较高;另外比如新增紧急消息的发送或者新增短信的方式发送消息的需求,改动较多,扩展性较差。

方案二,为桥接模式实现方式,在消息类的构造方法中传入接口SendMsgImplementor,从而使发送消息的抽象和具体实现进行了分离,实现了解耦;后期新增紧急消息的发送或者新增短信的方式发送消息的需求,也只需要新增紧急消息类和短信发送类即可,和QQ,微信等发送消息互不影响,扩展方便,符合开闭原则,复用原则。

来源:https://juejin.cn/post/7067005813717467166

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com