常见的设计模式(八)——桥接模式

	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个抽象对象间“一个接一个”的依赖关系

第三步:为每个抽象因素提供具体实现

从本质上看,桥模式解决的是对抽象中正交变化因素的进一步分解及衔接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值