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


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


长处 


    抽象和实现分离


    扩充能力


    


注意事项


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


我是菜鸟,我在路上。