定义
将形象和实现解耦,使得两者能够独立地变动
实用状况
- 你不心愿在形象和实现局部之间有一个固定的绑定关系。比方:你想在程序运行时能够切换实现局部;
- 类的形象以及它的实现都应该能够通过生成子类的形式实现。此时,桥接模式能够让你对不同的形象接口和实现局部进行组合并别离对他们进行裁减;
- 对一个形象的实现局部的批改不应答客户产生影响。
构造
通过构造咱们能够分明地看到抽象类 Abstraction 就像是一个桥梁一样将 RefinedAbstraction 和 Implementor 连接起来。
代码示例
工厂生产产品模仿
模仿工厂生产销售产品
文件目录
bridge/|-- Client.java // 测试代码|-- factory| |-- CanFactory.java // 罐头工厂| `-- ModernFactory.java // 现代化工厂|-- Factory.java // 工厂的抽象类|-- product| |-- Can.java // 产品具体类 罐头| `-- Toy.java // 产品具体类 玩具`-- Product.java // 产品的抽象类
产品类相干代码
public abstract class Product { protected void made() { System.out.println(getClass().getSimpleName() + " has been made"); } protected void sold() { System.out.println(getClass().getSimpleName() + " has been sold"); }}public class Can extends Product { @Override public void made() { super.made(); } @Override public void sold() { super.sold(); }}public class Toy extends Product { @Override public void made() { super.made(); } @Override public void sold() { super.sold(); }}
工厂相干代码
public abstract class Factory { private Product product; // 援用形象的产品类 public Factory(Product p) { this.product = p; } public void makeMoney() { product.made(); product.sold(); }}public class CanFactory extends Factory { // 只承受Can类 public CanFactory(Can p) { super(p); } @Override public void makeMoney() { super.makeMoney(); System.out.println(getClass().getSimpleName() + " make money!"); }}public class ModernFactory extends Factory { // 只有是Product即可生产 public ModernFactory(Product p) { super(p); } @Override public void makeMoney() { super.makeMoney(); System.out.println("ModernFactory make money!"); }}
罐头工厂CanFactory
只能生产罐头Can
。而古代工厂ModernFactory
能够生产Product
,罐头或者玩具Toy
都能够。
测试与输入
Can can = new Can();CanFactory canFactory = new CanFactory(can);canFactory.makeMoney();ModernFactory modernFactory = new ModernFactory(new Toy());modernFactory.makeMoney();/*Can has been madeCan has been soldCanFactory make money!Toy has been madeToy has been soldModernFactory make money!*/
【Android 零根底入门教程视频】
【Android 框架源码解析视频】
【Android 大厂面试题精讲视频】