码迷,mamicode.com
首页 > 其他好文 > 详细

桥接模式

时间:2020-02-15 13:47:54      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:部分   block   pat   driver   vat   桥接   eth   静态代码块   bridge   



1. 桥接模式(Bridge Pattern)

桥接模式是一种对象结构型模式,是将抽象部分与它的实现部分 分离,使它们都可以独立地变化,其主要对象有:

  • Abstraction:抽象类
  • RefinedAbstraction:抽象类的具体实现
  • Implementor:实现类接口
  • ConcreteImplementor:具体实现类

JDBC中,Class.forName(“com.mysql.jdbc.Driver”),加载类的静态代码块就使用了桥接模式




2. 流程

举例需求:这里有猫和狗,猫会这个功能,狗会这个功能,但不满足于此,怎么给猫和狗增加一个功能呢?这里增加一个鸟动物,鸟增加一个功能怎么实现?这种动物功能互相组合可以用桥接模式来实现


2.1 实现类接口

public interface AbstractFunction {
    
    public abstract void doSomething();
}


2.2 具体实现类

// 吃功能
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("睡的功能");
    }
}


2.3 抽象类

public abstract class AbstractAnimal {
    
    private AbstractFunction af;
    
    public void setAf(AbstractFunction af) {
        this.af = af;
    }

    public abstract void doSomething();
}


2.4 抽象类的具体实现

// 猫
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();
    }
}


2.5 测试

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();
    }
}
猫增加了
玩的功能

---------人工分割线-----------

狗增加了
吃的功能
---------人工分割线-----------
狗增加了
玩的功能




3. 动态扩展

改动抽象类

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();
    }
}
狗增加了
吃的功能
玩的功能
睡的功能




桥接模式

标签:部分   block   pat   driver   vat   桥接   eth   静态代码块   bridge   

原文地址:https://www.cnblogs.com/Howlet/p/12311094.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!