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

    《大话设计模式》中就Bridge模式的解释:

    手机品牌和软件是两个概念,不同的软件可以在不同的手机上,不同的手机可以有相同的软件,两者都具有很大的变动性。如果我们单独以手机品牌或手机软件为基类来进行继承扩展的话,无疑会使类的数目剧增并且耦合性很高,(如果更改品牌或增加软件都会增加很多的变动)两种方式的结构如下:

     

    所以将两者抽象出来两个基类分别是PhoneBrand和PhoneSoft,那么在品牌类中聚合一个软件对象的基类将解决软件和手机扩展混乱的问题,这样两者的扩展就相对灵活,剪短了两者的必要联系,结构图如下:

    // Bridge.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    class PhoneSoft{
    public:
        virtual void run()=0;
    };
    
    class PlayBallGame:public PhoneSoft{
    public:
        void run(){
            cout<<"playball"<<endl;
        }
    };
    
    class AddressList:public PhoneSoft{
    public:
        void run(){
            cout<<"addresslist"<<endl;
        }
    };
    
    class PhoneBrand{
    public:
        virtual void setSoft(PhoneSoft * p) = 0;
        virtual void run() = 0;
    protected:
        PhoneSoft * psoft;
    };
    
    class Nokia:public PhoneBrand{
    public:
        void setSoft(PhoneSoft * p){
            this->psoft = p;    
        }    
        void run(){
            cout<<"Nokia : ";
            this->psoft->run();
        }
    };    
    
    class Moto:public PhoneBrand{
    public:
        void setSoft(PhoneSoft * p){
            this->psoft = p;    
        }    
        void run(){
            cout<<"Moto : ";
            this->psoft->run();
        }
    };
    int main(int argc, char* argv[])
    {
        PhoneBrand * pphone = new Moto;
        pphone->setSoft(new AddressList);
        pphone->run();
        pphone->setSoft(new PlayBallGame);
        pphone->run();
        return 0;
    }
  • 相关阅读:
    Apache conf文件配置个人总结
    JavaScript模块化编程之require.js与sea.js
    Huffman树与最优二叉树续
    数据结构之Huffman树与最优二叉树
    浅谈JavaScript中的字符串操作
    浅谈二叉树遍历的栈方法
    浅谈JavaScript中的柯里化函数
    JavaScript之再谈回调与闭包
    浅谈JavaScript中typeof与instanceof的区别
    Golang解压文件,带目录
  • 原文地址:https://www.cnblogs.com/xiumukediao/p/4640771.html
Copyright © 2011-2022 走看看