diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/Account.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/Account.java new file mode 100644 index 0000000..e762acd --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/Account.java @@ -0,0 +1,22 @@ +package top.fjy8018.designpattern.pattern.structural.bridge; + +/** + * 银行账号——行为接口 + * + * @author F嘉阳 + * @date 2020/2/29 9:55 + */ +public interface Account { + + /** + * 打开一个账号 + * + * @return + */ + Account openAccount(); + + /** + * 查看账号类型 + */ + void showAccountType(); +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/Bank.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/Bank.java new file mode 100644 index 0000000..e83d7c7 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/Bank.java @@ -0,0 +1,26 @@ +package top.fjy8018.designpattern.pattern.structural.bridge; + +import lombok.AllArgsConstructor; + +/** + * 抽象银行 + * 组合账户接口,交由子类实现具体的行为 + * + * @author F嘉阳 + * @date 2020/2/29 10:05 + */ +@AllArgsConstructor +public abstract class Bank { + + protected Account account; + + /** + * 打开一个账户 + * 该方法定义与接口相同,方法名称可以不同 + * 当前抽象类的openAccount方法需要委托给Account接口openAccount方法实现 + * 当前类为抽象类,委托给接口的实现类执行,体现抽象与实现分离 + * + * @return + */ + abstract Account openAccount(); +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/DepositAccount.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/DepositAccount.java new file mode 100644 index 0000000..81a8725 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/DepositAccount.java @@ -0,0 +1,31 @@ +package top.fjy8018.designpattern.pattern.structural.bridge; + +import lombok.extern.slf4j.Slf4j; + +/** + * 定期账户 + * + * @author F嘉阳 + * @date 2020/2/29 9:57 + */ +@Slf4j +public class DepositAccount implements Account { + /** + * 打开一个账号 + * + * @return + */ + @Override + public Account openAccount() { + log.info("打开定期账户"); + return new DepositAccount(); + } + + /** + * 查看账号类型 + */ + @Override + public void showAccountType() { + log.info("这是一个定期账户"); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/GCBBank.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/GCBBank.java new file mode 100644 index 0000000..cec75f2 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/GCBBank.java @@ -0,0 +1,31 @@ +package top.fjy8018.designpattern.pattern.structural.bridge; + +import lombok.extern.slf4j.Slf4j; + +/** + * @author F嘉阳 + * @date 2020/2/29 10:09 + */ +@Slf4j +public class GCBBank extends Bank { + + public GCBBank(Account account) { + super(account); + } + + /** + * 打开一个账户 + * 该方法定义与接口相同,方法名称可以不同 + * 当前抽象类的openAccount方法需要委托给Account接口openAccount方法实现 + * 当前类为抽象类,委托给接口的实现类执行,体现抽象与实现分离 + * + * @return + */ + @Override + Account openAccount() { + log.info("打开广州银行账户"); + // 委托 + account.openAccount(); + return account; + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/ICBCBank.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/ICBCBank.java new file mode 100644 index 0000000..dcf1119 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/ICBCBank.java @@ -0,0 +1,31 @@ +package top.fjy8018.designpattern.pattern.structural.bridge; + +import lombok.extern.slf4j.Slf4j; + +/** + * @author F嘉阳 + * @date 2020/2/29 10:11 + */ +@Slf4j +public class ICBCBank extends Bank { + + public ICBCBank(Account account) { + super(account); + } + + /** + * 打开一个账户 + * 该方法定义与接口相同,方法名称可以不同 + * 当前抽象类的openAccount方法需要委托给Account接口openAccount方法实现 + * 当前类为抽象类,委托给接口的实现类执行,体现抽象与实现分离 + * + * @return + */ + @Override + Account openAccount() { + log.info("打开工商银行账户"); + // 委托 + account.openAccount(); + return account; + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/SavingAccount.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/SavingAccount.java new file mode 100644 index 0000000..57f502e --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/bridge/SavingAccount.java @@ -0,0 +1,31 @@ +package top.fjy8018.designpattern.pattern.structural.bridge; + +import lombok.extern.slf4j.Slf4j; + +/** + * 活期账户 + * + * @author F嘉阳 + * @date 2020/2/29 9:58 + */ +@Slf4j +public class SavingAccount implements Account { + /** + * 打开一个账号 + * + * @return + */ + @Override + public Account openAccount() { + log.info("打开活期账户"); + return new SavingAccount(); + } + + /** + * 查看账号类型 + */ + @Override + public void showAccountType() { + log.info("这是一个活期账户"); + } +} diff --git a/src/test/java/top/fjy8018/designpattern/pattern/structural/bridge/AccountTest.java b/src/test/java/top/fjy8018/designpattern/pattern/structural/bridge/AccountTest.java new file mode 100644 index 0000000..8379209 --- /dev/null +++ b/src/test/java/top/fjy8018/designpattern/pattern/structural/bridge/AccountTest.java @@ -0,0 +1,23 @@ +package top.fjy8018.designpattern.pattern.structural.bridge; + +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; + +/** + * @author F嘉阳 + * @date 2020/2/29 14:30 + */ +@Slf4j +class AccountTest { + + @Test + void openAccount() { + Bank gcbBank = new GCBBank(new DepositAccount()); + Account gcbAccount = gcbBank.openAccount(); + gcbAccount.showAccountType(); + + Bank icbcBank = new ICBCBank(new SavingAccount()); + Account icbcAccount = icbcBank.openAccount(); + icbcAccount.showAccountType(); + } +} \ No newline at end of file