天天看点

设计模式_桥梁模式

Bridge Pattern

    Decouple an abstraction from its implementation so that the two can vary independently.(将抽象和实现解耦。使得倆者能够独立的变化)

样例

"天下熙熙,皆为利来。天下攘攘,皆为利往"  现实和结构分开

服装公司 ="服装"+"公司" ="服装公司"  

解耦之前是服装公司。写一个Corp公司抽象类。然后即可了。解耦后,变成"服装"+"公司",服装抽象化为产品,而公司抽象为公司,倆者可独立变化,在抽象层面实现解耦。 

产品抽象

public abstract class Product {
 public abstract void beProducted();
 public abstract void beSelled();
}       

公司抽象

public abstract class Corp {
 private Product product;
 
 public Corp(Product _product){
  this.product=_product;
 }
 
 public void makeMoney(){
  this.product.beProducted();
  this.product.beSelled();
 }
}      

房子也是产品不是吗?

public class House extends Product {
 @Override
 public void beProducted() {
  System.out.println("生产出的房子是这种...");
 }
 @Override
 public void beSelled() {
  System.out.println("生产出的房子卖出去了....");
 }
}      

IPod。高大上呀。

public class IPod extends Product {
 @Override
 public void beProducted() {
  System.out.println("生产出的ipod是这种");
 }
 @Override
 public void beSelled() {
  System.out.println("生产的IPod卖出去了");
 }
}      

房地产公司仅仅和房子打交道

public class HouseCorp extends Corp {
 public HouseCorp(House _house) {
  super(_house);
 }
 @Override
 public void makeMoney() {
  super.makeMoney();
  System.out.println("房地产公司赚大钱了");
 }
}      

山寨公司什么产品都卖

public class ShanZhaiCorp extends Corp {
 public ShanZhaiCorp(Product _product) {
  super(_product);
 }
 @Override
 public void makeMoney() {
  super.makeMoney();
  System.out.println("我是山寨,我赚钱呀");
 }
}      

场景測试

public static void main(String[] args) {
  System.out.println("房地产公司是这样执行的");
  House house=new House();
  HouseCorp houseCorp=new HouseCorp(house);
  houseCorp.makeMoney();
 
  System.out.println();
 
  System.out.println("山寨公司是这样执行的");
  ShanZhaiCorp shanZhaiCorp=new ShanZhaiCorp(new IPod());
  shanZhaiCorp.makeMoney();
 }      

瞧瞧人家山寨公司,什么东西流行就生产什么。反正价格低,质量嘛也有那么一点点保证。

长处 

    抽象和实现分离

    扩充能力

注意事项

    主要考虑怎样拆分抽象和实现

我是菜鸟,我在路上。