-
桥接模式
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
-
适用性
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种设计模式查看更多的设计模式
Java设计模式之桥接模式
最新推荐文章于 2025-03-29 01:26:25 发布