zoukankan      html  css  js  c++  java
  • 设计模式_桥梁模式


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

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


    长处 
        抽象和实现分离
        扩充能力
        
    注意事项
        主要考虑怎样拆分抽象和实现

    我是菜鸟,我在路上。

  • 相关阅读:
    ASP.NET MVC EF4.1
    RabbitMQ Boot Step
    图书商城项目总论
    CodeSharp.EventSourcing框架介绍如何实现异步事件订阅
    asp.net的cms 原理篇
    异步编程:线程概述及使用
    2012
    CodeSharp.EventSourcing框架介绍
    最近开发的一个文档管理系统
    团队项目开发
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6795556.html
Copyright © 2011-2022 走看看