当前位置:   article > 正文

Java设计模式之结构型-桥接模式(UML类图+案例分析)_java桥接设计模式

java桥接设计模式

目录

一、基础概念

二、UML类图

三、角色设计

四、案例分析

4.1、支付方式

4.2、支付渠道 

五、总结


一、基础概念

桥接模式(Bridge Pattern)是一种结构型设计模式,其主要目的是“将抽象部分与实现部分分离,使它们都可以独立地变化”。

桥接模式的核心思想是把抽象(abstraction)与实现(implementation)分离开来,从而可以独立变化。

抽象类定义抽象接口,包含对实现对象的引用。

实现类提供各种实现方案,抽象接口调用实现对象的相关方法完成工作。

这样抽象部分和实现部分就可以通过抽象层建立联系,相互独立地变化而不影响对方。

二、UML类图

三、角色设计

角色描述
抽象类定义抽象类,并包含一个对实现类对象的引用
扩展抽象类是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法
实现类接口定义实现类接口,供扩展抽象类调用
具体实现类实现类接口的具体实现

四、案例分析

在日常生活中不管用什么渠道进行支付,例如支付宝、微信支付和云闪付等,它们都提供了三种支付方式,分别是密码支付、指纹支付和人脸支付,下面就通过代码来实现这个例子让大家更容易去理解这个设计模式。

4.1、支付方式

定义支付方式的接口:

  1. package mode;
  2. public interface PayMode {
  3. void mode();
  4. }

密码支付实现类: 

  1. package mode;
  2. public class PwdPayMode implements PayMode {
  3. @Override
  4. public void mode() {
  5. System.out.println("密码支付");
  6. }
  7. }

指纹支付实现类:

  1. package mode;
  2. public class FingerPayMode implements PayMode{
  3. @Override
  4. public void mode() {
  5. System.out.println("指纹支付");
  6. }
  7. }

人脸支付实现类:

  1. package mode;
  2. public class FacePayMode implements PayMode {
  3. @Override
  4. public void mode() {
  5. System.out.println("人脸支付");
  6. }
  7. }

4.2、支付渠道 

定义支付渠道的抽象类:

  1. package channel;
  2. import mode.PayMode;
  3. public abstract class PayAbstract {
  4. protected PayMode payMode;
  5. public PayAbstract(PayMode payMode) {
  6. this.payMode = payMode;
  7. }
  8. public abstract void transfer();
  9. }

支付渠道抽象类子类-支付宝:

  1. package channel;
  2. import mode.PayMode;
  3. public class ZfbPay extends PayAbstract {
  4. public ZfbPay(PayMode payMode) {
  5. super(payMode);
  6. }
  7. @Override
  8. public void transfer() {
  9. System.out.println("支付宝渠道");
  10. this.payMode.mode();
  11. }
  12. }

支付渠道抽象类子类-微信:

  1. package channel;
  2. import mode.PayMode;
  3. public class WxPay extends PayAbstract {
  4. public WxPay(PayMode payMode) {
  5. super(payMode);
  6. }
  7. @Override
  8. public void transfer() {
  9. System.out.println("微信渠道");
  10. this.payMode.mode();
  11. }
  12. }

客户端:

  1. public class Client{
  2. public static void main(String[] args) {
  3. PayAbstract wxPay = new WxPay(new PwdPayMode());
  4. wxPay.transfer();
  5. PayAbstract wxPay2 = new WxPay(new FingerPayMode());
  6. wxPay2.transfer();
  7. PayAbstract wxPay3 = new WxPay(new FacePayMode());
  8. wxPay3.transfer();
  9. PayAbstract zfbPay = new ZfbPay(new PwdPayMode());
  10. zfbPay.transfer();
  11. PayAbstract zfbPay2 = new ZfbPay(new FingerPayMode());
  12. zfbPay2.transfer();
  13. PayAbstract zfbPay3 = new ZfbPay(new FacePayMode());
  14. zfbPay3.transfer();
  15. }
  16. }

运行结果如下:

五、总结

优点:

1、抽象和实现分离,提高了扩展性,符合开闭原则。

2、实现细节对客户透明,可以对客户端隐藏变化。

3、符合组合复用原则,不使用继承提高复用性。

缺点:

1、增加了系统的复杂性。

应用场景:

1、一个抽象有多种实现需要动态切换时。

2、系统需要在多个平台上运行时。

3、一个抽象有多个变化维度需要独立扩展。

符合的设计原则:

1、单一职责原则(Single Responsibility Principle

桥接模式实现了抽象部分和实现部分的分离,使它们各自只需要关注一个单一的职责。

2、开闭原则(Open Closed Principle

桥接模式使抽象部分和实现部分可以独立扩展开放,而不需要修改对方的代码。

3、组合复用原则(Composite Reuse Principle

桥接模式充分利用了组合和聚合关系增加系统的复用性。

4、里氏替换原则(Liskov Substitution Principle

抽象部分针对接口编程,其引用实现类对象可以替换为其子类,继续运行。

5、依赖倒转原则(Dependency Inversion Principle

抽象部分和实现部分通过接口联系,实现了面向接口编程隔离了依赖关系。

总的来说桥接模式通过抽象和实现分离,实现解耦,让它们可以独立变化,从而保持高扩展性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/568999
推荐阅读
相关标签
  

闽ICP备14008679号