西安监控系统网站开发,天河网站建设哪里好,gofair外贸建站,网站建设与管理实用教程定义: 桥接模式是将抽象部分与它的实现部分分离#xff0c;使它们都可以独立地变化。它是一种对象结构型模式#xff0c;又称为柄体(Handle and Body)模式或接口(Interfce)模式。 本章代码:小麻雀icknn/设计模式练习 - Gitee.com 结构:
抽象化(Abstraction)角色#xff1a…定义: 桥接模式是将抽象部分与它的实现部分分离使它们都可以独立地变化。它是一种对象结构型模式又称为柄体(Handle and Body)模式或接口(Interfce)模式。 本章代码:小麻雀icknn/设计模式练习 - Gitee.com 结构:
抽象化(Abstraction)角色抽象化给出的定义并保存一个对实现化对象的引用。扩展抽象化(Refined Abstraction)角色是抽象化角色的子类实现父类中的业务方法并通过组合关系调用实现化角色中的业务方法。实现化(Implementor)角色这个角色给出实现化角色的接口但不给出具体的实现。必须指出的是这个接口不一定和抽象化角色的接口定义相同实际上这两个接口可以非常不一样。实现化角色应当只给出底层操作而抽象化角色应当只给出基于底层操作的更高一层的操作。具体实现化(Concrete Implementor)角色这个角色给出实现化角色接口的具体实现。
UML类图: 实例:
抽象化角色
package com.study.main.Bridging;import java.math.BigDecimal;public abstract class Pay {IPayMode payMode;public Pay(IPayMode payMode) {this.payMode payMode;}abstract String transfer(String uid, BigDecimal amount);
}扩展抽象化角色
package com.study.main.Bridging;import java.math.BigDecimal;public class WXPay extends Pay{public WXPay(IPayMode payMode) {super(payMode);}OverrideString transfer(String uid, BigDecimal amount) {boolean security payMode.security(uid);if(security){System.out.println(恭喜您,您用ZFB成功支付了amount元);}return uid;}
}package com.study.main.Bridging;import java.math.BigDecimal;public class ZFBPay extends Pay{public ZFBPay(IPayMode payMode) {super(payMode);}OverrideString transfer(String uid, BigDecimal amount) {boolean security payMode.security(uid);if(security){System.out.println(恭喜您,您用ZFB成功支付了amount元);}return uid;}
}实现化角色
package com.study.main.Bridging;public interface IPayMode {boolean security(String id);
}具体实现化角色
package com.study.main.Bridging;public class PasswordTypeMethodPay implements IPayMode{Overridepublic boolean security(String id) {System.out.println(使用密码支付,验证id为 id );return !id.isBlank();}
}
package com.study.main.Bridging;public class FaceTypeMethodPay implements IPayMode{Overridepublic boolean security(String id) {System.out.println(使用面容支付,验证id为 id );return !id.isBlank();}
}调用
package com.study.main.Bridging;import java.math.BigDecimal;public class BridginMain {public static void main(String[] args) {IPayMode faceTypeMethodPay new FaceTypeMethodPay();WXPay wxPay new WXPay(faceTypeMethodPay);wxPay.transfer(1111111-2222-3333, BigDecimal.valueOf(200));IPayMode passwordTypeMethodPay new PasswordTypeMethodPay();ZFBPay zfbPay new ZFBPay(passwordTypeMethodPay);zfbPay.transfer(222-33-239-2323, BigDecimal.valueOf(30000));}
}运行结果 桥接模式在源码中应用: 特别简短的代码其实只调用了DriverManager中的registerDriver方法来注册驱动。当驱动注册完成后我们就会开始调用DriverManager中的getconnection方法了
场景分析:
抽象实现灵活 : 抽象 和 具体实现 之间 , 需要 增加更多灵活性 的情况下 , 适合使用桥接模式 ;使用 桥接模式 , 可以 避免在这两个层次之间 , 建立静态的继承关系 , 通过 桥接模式 在二者之间建立 关联关系 ;抽象 和 实现 都可以 各自 以继承的方式扩展 , 互不影响 ;可以动态的 将 抽象 的子类对象 和 实现 的子类对象 进行组合 , 在系统中 , 抽象 和 实现 之间进行了解耦 ;独立变化维度 : 一个类存在 2 22 个或更多的 独立变化维度 , 并且这些维度都需要 独立扩展 ;抽象部分可以 独立扩展 , 具体实现的部分 , 也可以独立扩展 ;不使用继承 : 不希望使用继承 , 或 因多层继承导致系统类的个数增加 ;
桥接模式优缺点 :
优点:
抽象和实现的分离。优秀的扩展能力。经常遇到一些可以通过两个或多个维度划分的事物第一种解决方式就是多层继承但是复用性比较差同时类的个数也会很多桥接模式是改进其的更好办法桥接模式增强了系统的扩展性在两个维度中扩展任意一个维度都不需要修改原有代码符合开闭原则
缺点:
桥接模式的引入会增加系统的理解与设计难度由于聚合关联关系建立在抽象层要求开发者针对抽象进行设计与编程。桥接模式增加了系统的理解与设计难度:因为聚合关系建立在抽象层要求开发者针对抽象化进行设计与编程能正确地识别出系统中两个独立变化的维度