1. 定义
桥接模式将抽象部分与它的实现部分分离,使它们都可以独立的变化。
2. 类图
3. Example
假如你是个小有所成的成功人士,开了家公司,生产什么商品全靠追风,哪个赚钱生产哪个,请写出商品生产、销售的过程,要求商品变化时,代码尽可能少变化。
package com.gitlearning.hanldegit.patterns.cor.bridge;
public abstract class Corp {
Product product;
public Corp(Product product) {
this.product = product;
}
abstract void makeMoney();
}
class FakeCorp extends Corp {
public FakeCorp(Product product) {
super(product);
}
@Override
void makeMoney() {
product.beProduced();
product.beSelled();
}
}
interface Product {
void beProduced();
void beSelled();
}
class IPod implements Product {
@Override
public void beProduced() {
System.err.println("produce : ipod" );
}
@Override
public void beSelled() {
System.err.println("sell: ipod");
}
}
class Toy implements Product {
@Override
public void beProduced() {
System.err.println("produce : toy" );
}
@Override
public void beSelled() {
System.err.println("sell : toy" );
}
}
class Test {
public static void main(String[] args) {
FakeCorp fakeCorp = new FakeCorp(new IPod());
fakeCorp.makeMoney();
fakeCorp = new FakeCorp(new Toy());
fakeCorp.makeMoney();
}
}
输出如下:
produce : ipod
sell: ipod
produce : toy
sell : toy
个人理解:
桥接模式好像是这样的:商品可以被生产和销售,这进行了一次抽象;而公司依赖于不同的产品,则对应于类图左侧的抽象。公司赚取具体是依靠产品的,因此产品可当做右侧的implentor。
4. 使用
- 不希望或不适用使用继承的场景
- 接口或抽象类不稳定的场景
- 重用性要求较高的场景
5.其他
优点:
- 抽象和实现分离
- 优秀的扩充能力