社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
桥接模式
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
适用性
1)你不希望在抽象和它的实现部分之间有一个固定的绑定关系。
例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
2)类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
3)对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。
4)你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。
举例
1)一个公司,有产品,具体有服装公司、汽车公司、食品公司等。
2)一个产品,具体可以包含服装、汽车、食品等。
UML类图
代码示例
package com.jin.demo.DesignPatterns.Bridge;
/**
* 产品
* @auther jinsx
* @date 2019-05-07 09:02
*/
public abstract class Product {
// 不管什么产品,都要生产
public abstract void make();
// 不管什么产品,都要销售
public abstract void sell();
}
package com.jin.demo.DesignPatterns.Bridge;
/**
* @auther jinsx
* @date 2019-05-07 09:14
*/
public class Shirt extends Product {
@Override
public void make() {
System.out.println("生产内衣衬衫");
}
@Override
public void sell() {
System.out.println("内衣衬衫卖出去啦...");
}
}
外套package com.jin.demo.DesignPatterns.Bridge;
/**
* @auther jinsx
* @date 2019-05-07 09:09
*/
public class Jacket extends Product {
@Override
public void make() {
System.out.println("生产外套恰克");
}
@Override
public void sell() {
System.out.println("外套恰克卖出去啦...");
}
}
package com.jin.demo.DesignPatterns.Bridge;
/**
* 我是一个公司
* @auther jinsx
* @date 2019-05-07 09:24
*/
public abstract class Corp {
// 我要生产服装
private Product product;
public Corp(Product product) {
this.product = product;
}
// 公司是用来挣钱的
public void makeMoney(){
this.product.make();
this.product.sell();
}
}
package com.jin.demo.DesignPatterns.Bridge;
/**
* 这是一个服装公司
* @auther jinsx
* @date 2019-05-07 09:28
*/
public class ClothingCorp extends Corp {
public ClothingCorp(Product product) {
super(product);
}
@Override
public void makeMoney() {
super.makeMoney();
System.out.println("服装公司挣大钱啦...");
}
}
package com.jin.demo.DesignPatterns.Bridge;
/**
* @auther jinsx
* @date 2019-05-07 09:31
*/
public class TestBridge {
public static void main(String[] args) {
System.out.println("---外套这样挣钱---");
ClothingCorp shirt = new ClothingCorp(new Shirt());
shirt.makeMoney();
System.out.println("---内衣这样挣钱---");
ClothingCorp jacket = new ClothingCorp(new Jacket());
jacket.makeMoney();
}
}
---外套这样挣钱---
生产内衣衬衫
内衣衬衫卖出去啦...
服装公司挣大钱啦...
---内衣这样挣钱---
生产外套恰克
外套恰克卖出去啦...
服装公司挣大钱啦...
点击Java之23种设计模式查看更多的设计模式
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!