龗孖 龗孖
首页
  • JAVA
  • 设计模式
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 页面

    • HTML
    • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

靇孖

某微型企业非牛逼技术专家。
首页
  • JAVA
  • 设计模式
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 页面

    • HTML
    • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 设计模式
  • 设计模式-单例
  • 设计模式-中介者
  • 设计模式-享元
  • 设计模式-代理
  • 设计模式-原型模式
  • 设计模式-命令
  • 设计模式-备忘录
  • 设计模式-外观
  • 设计模式-工厂方法
  • 设计模式-抽象工厂
  • 设计模式-桥接
    • 桥接(Bridge)
      • Intent
      • Class Diagram
      • Implementation
      • JDK
  • 设计模式-模板方法
  • 设计模式-状态
  • 设计模式-生成器
  • 设计模式-空对象
  • 设计模式-策略
  • 设计模式-简单工厂
  • 设计模式-组合
  • 设计模式-装饰
  • 设计模式-观察者
  • 设计模式-解释器
  • 设计模式-访问者
  • 设计模式-责任链
  • 设计模式-迭代器
  • 设计模式-适配器
  • 设计模式
  • 设计模式
龗孖
2023-07-20
目录

设计模式-桥接

# 桥接(Bridge)

# Intent

将抽象与实现分离开来,使它们可以独立变化。

# Class Diagram

  • Abstraction:定义抽象类的接口
  • Implementor:定义实现类接口

# Implementation

RemoteControl 表示遥控器,指代 Abstraction。

TV 表示电视,指代 Implementor。

桥接模式将遥控器和电视分离开来,从而可以独立改变遥控器或者电视的实现。

public abstract class TV {
    public abstract void on();

    public abstract void off();

    public abstract void tuneChannel();
}
1
2
3
4
5
6
7
public class Sony extends TV {
    @Override
    public void on() {
        System.out.println("Sony.on()");
    }

    @Override
    public void off() {
        System.out.println("Sony.off()");
    }

    @Override
    public void tuneChannel() {
        System.out.println("Sony.tuneChannel()");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class RCA extends TV {
    @Override
    public void on() {
        System.out.println("RCA.on()");
    }

    @Override
    public void off() {
        System.out.println("RCA.off()");
    }

    @Override
    public void tuneChannel() {
        System.out.println("RCA.tuneChannel()");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public abstract class RemoteControl {
    protected TV tv;

    public RemoteControl(TV tv) {
        this.tv = tv;
    }

    public abstract void on();

    public abstract void off();

    public abstract void tuneChannel();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
public class ConcreteRemoteControl1 extends RemoteControl {
    public ConcreteRemoteControl1(TV tv) {
        super(tv);
    }

    @Override
    public void on() {
        System.out.println("ConcreteRemoteControl1.on()");
        tv.on();
    }

    @Override
    public void off() {
        System.out.println("ConcreteRemoteControl1.off()");
        tv.off();
    }

    @Override
    public void tuneChannel() {
        System.out.println("ConcreteRemoteControl1.tuneChannel()");
        tv.tuneChannel();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ConcreteRemoteControl2 extends RemoteControl {
    public ConcreteRemoteControl2(TV tv) {
        super(tv);
    }

    @Override
    public void on() {
        System.out.println("ConcreteRemoteControl2.on()");
        tv.on();
    }

    @Override
    public void off() {
        System.out.println("ConcreteRemoteControl2.off()");
        tv.off();
    }

    @Override
    public void tuneChannel() {
        System.out.println("ConcreteRemoteControl2.tuneChannel()");
        tv.tuneChannel();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Client {
    public static void main(String[] args) {
        RemoteControl remoteControl1 = new ConcreteRemoteControl1(new RCA());
        remoteControl1.on();
        remoteControl1.off();
        remoteControl1.tuneChannel();
        RemoteControl remoteControl2 = new ConcreteRemoteControl2(new Sony());
         remoteControl2.on();
         remoteControl2.off();
         remoteControl2.tuneChannel();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

# JDK

  • AWT (It provides an abstraction layer which maps onto the native OS the windowing support.)
  • JDBC
上次更新: 2024/11/03, 21:31:17
设计模式-抽象工厂
设计模式-模板方法

← 设计模式-抽象工厂 设计模式-模板方法→

最近更新
01
树中两个节点的最低公共祖先
10-17
02
hexo多平台多博客网站同步
09-04
03
最长不含重复字符的子字符串
09-03
更多文章>
Theme by Vdoing | Copyright © 2015-2024 Ling ma | 996.icu | 京ICP备16011424号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式