桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。
本章代码:小麻雀icknn/设计模式练习 - Gitee.com
抽象化角色
- 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);
- }
-
- @Override
- String 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);
- }
-
- @Override
- String 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{
- @Override
- public boolean security(String id) {
- System.out.println("使用密码支付,验证id为" +id );
- return !id.isBlank();
- }
- }
- package com.study.main.Bridging;
-
- public class FaceTypeMethodPay implements IPayMode{
- @Override
- public 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方法了
优点:
缺点: