桥接模式是一种对象结构型模式,是将抽象部分与它的实现部分 分离,使它们都可以独立地变化,其主要对象有:
JDBC中,Class.forName(“com.mysql.jdbc.Driver”),加载类的静态代码块就使用了桥接模式
举例需求:这里有猫和狗,猫会玩
这个功能,狗会吃
这个功能,但不满足于此,怎么给猫和狗增加一个睡
功能呢?这里增加一个鸟动物,鸟增加一个唱
功能怎么实现?这种动物
和功能
互相组合可以用桥接模式来实现
public interface AbstractFunction {
public abstract void doFunction();
}
// 吃功能
public class EatFun implements AbstractFunction {
@Override
public void doFunction() {
System.out.println("吃的功能");
}
}
// 玩功能
public class PlayFun implements AbstractFunction {
@Override
public void doFunction() {
System.out.println("玩的功能");
}
}
// 睡功能
public class SleepFun implements AbstractFunction {
@Override
public void doFunction() {
System.out.println("睡的功能");
}
}
public abstract class AbstractAnimal {
private AbstractFunction af;
public void setAf(AbstractFunction af) {
this.af = af;
}
public abstract void doSomething();
}
// 猫
public class CatAnimal extends AbstractAnimal {
@Override
public void doSomething() {
System.out.println("猫增加了");
af.doFunction();
}
}
// 狗
public class DogAnimal extends AbstractAnimal {
@Override
public void doSomething() {
System.out.println("狗增加了");
af.doFunction();
}
}
public class test {
public static void main(String[] args) {
PlayFun pf = new PlayFun();
CatAnimal cat = new CatAnimal();
cat.setAf(pf);
cat.doSomething();
System.out.println("\n---------人工分割线-----------\n");
EatFun ef = new EatFun();
DogAnimal dog = new DogAnimal();
dog.setAf(ef);
dog.doSomething();
System.out.println("---------人工分割线-----------");
dog.setAf(pf);
dog.doSomething();
}
}
猫增加了
玩的功能
---------人工分割线-----------
狗增加了
吃的功能
---------人工分割线-----------
狗增加了
玩的功能
改动抽象类
public abstract class AbstractAnimal {
// 内部维护功能集合
public ArrayList<AbstractFunction> af = new ArrayList();
// 添加元素
public void addAf(AbstractFunction af) {
this.af.add(af);
}
public abstract void doSomething();
}
改动测试类
public class test {
public static void main(String[] args) {
EatFun ef = new EatFun();
PlayFun pf = new PlayFun();
SleepFun sf = new SleepFun();
DogAnimal dog = new DogAnimal();
dog.addAf(ef);
dog.addAf(pf);
dog.addAf(sf);
dog.doSomething();
}
}
狗增加了
吃的功能
玩的功能
睡的功能