【校招VIP】Java设计模式之桥接模式

05月12日 收藏 0 评论 0 java开发

【校招VIP】Java设计模式之桥接模式

转载声明:文章来源https://blog.csdn.net/axing2015/article/details/90041962

桥接模式

将抽象部分与它的实现部分分离,使它们都可以独立地变化。

适用性

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();
}
}

执行测试结果

---外套这样挣钱---
生产内衣衬衫
内衣衬衫卖出去啦...
服装公司挣大钱啦...
---内衣这样挣钱---
生产外套恰克
外套恰克卖出去啦...
服装公司挣大钱啦...
C 0条回复 评论

帖子还没人回复快来抢沙发