1. 概述
2. 代码解析
public interface Account {
Account openAccount();
void showAccountType();
}
public class ABCBank extends Bank {
public ABCBank(Account account) {
super(account);
}
@Override
public Account openAccount() {
System.out.println("Open ABC bank account!");
account.openAccount();
return account;
}
}
public class ICBCBank extends Bank {
public ICBCBank(Account account) {
super(account);
}
@Override
public Account openAccount() {
System.out.println("Open ICBC account!");
account.openAccount();
return account;
}
}
public abstract class Bank {
protected Account account;
public Bank(Account account) {
this.account = account;
}
public abstract Account openAccount();
}
/**
* 定期账户
*/
public class DepositAccount implements Account {
@Override
public Account openAccount() {
System.out.println("Open Deposit Account");
return new DepositAccount();
}
@Override
public void showAccountType() {
System.out.println("This is deposit account!");
}
}
/**
* 活期账户
*/
public class SavingAccount implements Account {
@Override
public Account openAccount() {
System.out.println("Open Saving Account");
return new SavingAccount();
}
@Override
public void showAccountType() {
System.out.println("This is Saving account!");
}
}
/**
* 抽象、组合了Bank和Account;
* 然后, 通过桥接模式, 就能自由组合Bank和Account;
* 自由扩展.
*
* 注意的点: Bank在openAccount的时候, 需要把委托的Account调用委托的方法.
*/
public class BridgeTest {
public static void main(String[] args) {
Bank icbcBank = new ICBCBank(new DepositAccount());
Account account = icbcBank.openAccount();
account.showAccountType();
Bank icbcBank2 = new ICBCBank(new SavingAccount());
Account account2 = icbcBank2.openAccount();
account2.showAccountType();
/**
* print:
* Open ICBC account!
* This is deposit account!
* Open ICBC account!
* This is Saving account!
*/
}
}
3. 源码使用
- JDK的
DriverManager
和Driver
的关系;Driver可以根据不同的数据库,有不同的实现,获取Connection链接,确可以统一的通过DriverManager来获取。