public abstract class Product {
//甭管是什么产品它总要是能被生产出来
public abstract void beProducted();
//生产出来的东西,一定要销售出去,否则扩本呀
public abstract void beSelled();
}
public class House extends Product {
@Override
public void beProducted() {
// TODO Auto-generated method stub
System.out.println("生产出的房子是这个样子的...");
}
@Override
public void beSelled() {
// TODO Auto-generated method stub
System.out.println("生产出的房子卖出去了...");
}
}
public class Clothes extends Product{
@Override
public void beProducted() {
// TODO Auto-generated method stub
System.out.println("生产出的衣服是这个样子的...");
}
@Override
public void beSelled() {
// TODO Auto-generated method stub
System.out.println("生产出的衣服卖出去了...");
}
}
public abstract class Corp {
private Product product;
public Corp(Product product) {
// TODO Auto-generated constructor stub
this.product = product;
}
public void makeMoney(){
this.product.beProducted();
this.product.beSelled();
}
}
public class HouseCorp extends Corp {
public HouseCorp(House house){
super(house);
}
//房地产公司很High了,赚钱,计算利润
public void makeMoney(){
super.makeMoney();
System.out.println("房地产公司赚大钱了...");
}
}
public class ShanZhaiCorp extends Corp {
public ShanZhaiCorp(Product product) {
super(product);
// TODO Auto-generated constructor stub
}
public void makeMoney(){
super.makeMoney();
System.out.println("我赚钱呀...");
}
}
测试用例
public class BridgeTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
House house =new BridgeTest().new House();
System.out.println("-------房地产公司是这个样子运行的-------");
//先找到我的公司
HouseCorp houseCorp =new HouseCorp(house);
//看我怎么挣钱
houseCorp.makeMoney();
System.out.println("\n");
//山寨公司生产的产品很多,不过我只要指定产品就成了
System.out.println("-------山寨公司是这样运行的-------");
ShanZhaiCorp shanZhaiCorp = new ShanZhaiCorp(new Clothes());
shanZhaiCorp.makeMoney();
}
}
运行结果:
-------房地产公司是这个样子运行的-------
生产出的房子是这个样子的...
生产出的房子卖出去了...
房地产公司赚大钱了...
-------山寨公司是这样运行的-------
生产出的衣服是这个样子的...
生产出的衣服卖出去了...
我赚钱呀...
桥方式更多的是提示我们如何组织面向对象设计的分解方式,称为三步法;
第一步:把依赖具体变成依赖抽象上例中的Corp和Product都是抽象的,后来Corp依赖Product;
第二步:如果同时存在多个正交的变化因素,就顺次展开,逐个抽象。
每次将一个而且只有一个“变化因素”进行抽象,将依赖于“N个变化因素”的复杂性剥减为依赖于“1个抽象+(N-1)个变化因素”的复杂性,然后不断抽象,直至将N个变化因素依赖关系全部变为N个抽象对象间“一个接一个”的依赖关系
第三步:为每个抽象因素提供具体实现
从本质上看,桥模式解决的是对抽象中正交变化因素的进一步分解及衔接