前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >桥接模式

桥接模式

作者头像
晚上没宵夜
发布2020-03-10 10:47:29
1.6K0
发布2020-03-10 10:47:29
举报
文章被收录于专栏:Howl同学的学习笔记

1. 桥接模式(Bridge Pattern)

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

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

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

2. 流程

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

2.1 实现类接口

代码语言:javascript
复制
public interface AbstractFunction {
    
    public abstract void doFunction();
}

2.2 具体实现类

代码语言:javascript
复制
// 吃功能
public class EatFun implements AbstractFunction {

    @Override
    public void doFunction() {
        System.out.println("吃的功能");
    }
}
代码语言:javascript
复制
// 玩功能
public class PlayFun implements AbstractFunction {

    @Override
    public void doFunction() {
        System.out.println("玩的功能");
    }
}
代码语言:javascript
复制
// 睡功能
public class SleepFun implements AbstractFunction {

    @Override
    public void doFunction() {
        System.out.println("睡的功能");
    }
}

2.3 抽象类

代码语言:javascript
复制
public abstract class AbstractAnimal {
    
    private AbstractFunction af;
    
    public void setAf(AbstractFunction af) {
        this.af = af;
    }

    public abstract void doSomething();
}

2.4 抽象类的具体实现

代码语言:javascript
复制
// 猫
public class CatAnimal extends AbstractAnimal {

    @Override
    public void doSomething() {
        System.out.println("猫增加了");
        af.doFunction();
    }
}
代码语言:javascript
复制
// 狗
public class DogAnimal extends AbstractAnimal {

    @Override
    public void doSomething() {
        System.out.println("狗增加了");
        af.doFunction();
    }
}

2.5 测试

代码语言:javascript
复制
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();
    }
}
代码语言:javascript
复制
猫增加了
玩的功能

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

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

3. 动态扩展

改动抽象类

代码语言:javascript
复制
public abstract class AbstractAnimal {
    
    // 内部维护功能集合
    public ArrayList<AbstractFunction> af = new ArrayList();
    
    // 添加元素
    public void addAf(AbstractFunction af) {
        this.af.add(af);
    }

    public abstract void doSomething();
}

改动测试类

代码语言:javascript
复制
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();
    }
}
代码语言:javascript
复制
狗增加了
吃的功能
玩的功能
睡的功能
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 桥接模式(Bridge Pattern)
  • 2. 流程
    • 2.1 实现类接口
      • 2.2 具体实现类
        • 2.3 抽象类
          • 2.4 抽象类的具体实现
            • 2.5 测试
            • 3. 动态扩展
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档