zoukankan      html  css  js  c++  java
  • 桥接模式

    1. 定义

    桥接模式将抽象部分与它的实现部分分离,使它们都可以独立的变化。

    2. 类图

    3. Example

    假如你是个小有所成的成功人士,开了家公司,生产什么商品全靠追风,哪个赚钱生产哪个,请写出商品生产、销售的过程,要求商品变化时,代码尽可能少变化。

    package com.gitlearning.hanldegit.patterns.cor.bridge;
    
    public abstract class Corp {
        Product product;
    
        public Corp(Product product) {
            this.product = product;
        }
    
        abstract void makeMoney();
    }
    
    class FakeCorp extends Corp {
    
        public FakeCorp(Product product) {
            super(product);
        }
    
        @Override
        void makeMoney() {
            product.beProduced();
            product.beSelled();
        }
    }
    
    interface Product {
        void beProduced();
        void beSelled();
    }
    
    class IPod implements Product {
    
        @Override
        public void beProduced() {
            System.err.println("produce : ipod" );
        }
    
        @Override
        public void beSelled() {
            System.err.println("sell: ipod");
        }
    }
    
    class Toy implements Product {
    
        @Override
        public void beProduced() {
            System.err.println("produce : toy" );
        }
    
        @Override
        public void beSelled() {
            System.err.println("sell : toy" );
        }
    }
    
    
    class Test {
        public static void main(String[] args) {
            FakeCorp fakeCorp = new FakeCorp(new IPod());
            fakeCorp.makeMoney();
    
            fakeCorp = new FakeCorp(new Toy());
            fakeCorp.makeMoney();
        }
    }
    

    输出如下:

    produce : ipod
    sell: ipod
    produce : toy
    sell : toy
    
    

    个人理解:

    桥接模式好像是这样的:商品可以被生产和销售,这进行了一次抽象;而公司依赖于不同的产品,则对应于类图左侧的抽象。公司赚取具体是依靠产品的,因此产品可当做右侧的implentor。

    4. 使用

    1. 不希望或不适用使用继承的场景
    2. 接口或抽象类不稳定的场景
    3. 重用性要求较高的场景

    5.其他

    优点:

    1. 抽象和实现分离
    2. 优秀的扩充能力
    当你准备好了,机会来临的时候,你才能抓住
  • 相关阅读:
    Gradle学习系列之二——创建Task的多种方法
    Gradle学习系列之一——Gradle快速入门
    iOS8 定位失败问题
    IOS 项目release版本中关闭NSlog的打印
    iOS中使用block进行网络请求回调
    调用系统的loading界面
    iOS 调用地图导航
    转向ARC的说明
    ZipArchive(解压文件)
    ios background task
  • 原文地址:https://www.cnblogs.com/studentytj/p/12404895.html
Copyright © 2011-2022 走看看