赞
踩
将具体部分与他的实现部分分离,使他们可以独立的变化
通过组合的方式建立两个类的联系,而不是继承
结构型
- 抽象和具体之间增加更多的灵活性,使用桥接模式避免了使这两个层次之间产生静态的继承关系,
通过桥接模式使他们建立关联关系,抽象部分和具体的实现部分都可以继承的方式独立扩展互不影响
- 一个存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展
- 不希望使用继承,或因为多层继承导致系统类的个数剧增
- 分类抽象部分与具体实现部分
- 提高了系统的扩展性
- 符合开闭原则
- 符合合成复用原则
增加了系统的理解与设计难度
需要正确识别出系统两个部分的唯独
桥接模式与组合模式
组合模式强调部分与整体的组合,桥接模式强调的是
桥接模式和适配器模式
适配器模式是改变已有的接口,让他们之间可以相互配合,桥接模式是分离抽象和具体的实现,目的是分离,
public interface IAccount {
IAccount openAccount();
void getAccountType();
}
public class DepositAccount implements IAccount {
@Override
public IAccount openAccount() {
System.out.println("这是一个定期账号");
return new DepositAccount();
}
@Override
public void getAccountType() {
System.out.println("这是一个定期账号类型");
}
}
/** * @ClassName SavingAccount * @Description TODO * @Author maido * @Date 1:25 2022/10/28 * @Version 1.0 **/ public class SavingAccount implements IAccount { @Override public IAccount openAccount() { System.out.println("打开活期账号"); return new SavingAccount(); } @Override public void getAccountType() { System.out.println("这是活期账号"); } }
public abstract class Bank {
protected IAccount account;
public Bank(IAccount account) {
this.account = account;
}
abstract IAccount openAccount();
}
public class ABCBank extends Bank {
public ABCBank(IAccount account) {
super(account);
}
@Override
IAccount openAccount() {
System.out.println("打开中国农业银行");
return account;
}
}
public class ICBCBank extends Bank{
public ICBCBank(IAccount account) {
super(account);
}
@Override
IAccount openAccount() {
System.out.println("这是中国工商银行账户");
return account;
}
}
public class MainTest {
public static void main(String[] args) {
Bank icbcBank = new ICBCBank(new DepositAccount());
IAccount iAccount = icbcBank.openAccount();
iAccount.getAccountType();
Bank abcBank = new ABCBank(new SavingAccount());
IAccount openAccount = abcBank.openAccount();
openAccount.getAccountType();
}
}
java.sql.Driver java.sql.DriverManager java.sql.DriverInfo
- 1
- 2
- 3
public static synchronized void registerDriver(java.sql.Driver driver,
DriverAction da)
throws SQLException {
/* Register the driver if it has not already been added to our list */
if(driver != null) {
registeredDrivers.addIfAbsent(new DriverInfo(driver, da));
} else {
// This is for compatibility with the original DriverManager
throw new NullPointerException();
}
println("registerDriver: " + driver);
}
mysql
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
DriverManager是桥接的具体连接条件,通过注册驱动实现不同的驱动形式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。