外观模式(大话设计模式)C/C++版本

外观模式

C++

cpp 复制代码
#include <iostream>
using namespace std;

class stock1
{
public:
    void Sell()
    {
        cout << "股票1卖出" << endl;
    }

    void Buy()
    {
        cout << "股票1买入" << endl;
    }
};

class stock2
{
public:
    void Sell()
    {
        cout << "股票2卖出" << endl;
    }

    void Buy()
    {
        cout << "股票2买入" << endl;
    }
};

class stock3
{
public:
    void Sell()
    {
        cout << "股票3卖出" << endl;
    }

    void Buy()
    {
        cout << "股票3买入" << endl;
    }
};

class NationalDebt1
{
public:
    void Sell()
    {
        cout << "国债1卖出" << endl;
    }

    void Buy()
    {
        cout << "国债1买入" << endl;
    }
};

class Realty1
{
public:
    void Sell()
    {
        cout << "房地产1卖出" << endl;
    }

    void Buy()
    {
        cout << "房地产1买入" << endl;
    }
};

class Fund
{
private:
    stock1* gupiao1;
    stock2* gupiao2;
    stock3* gupiao3;
    NationalDebt1* guozhai;
    Realty1* fangdichan;

public:
    Fund()
    {
        gupiao1 = new stock1();
        gupiao2 = new stock2();
        gupiao3 = new stock3();
        guozhai = new NationalDebt1();
        fangdichan = new Realty1();
    }

    void BuyFund()
    {
        gupiao1->Buy();
        gupiao2->Buy();
        gupiao3->Buy();
        guozhai->Buy();
        fangdichan->Buy();
    }

    void SellFund()
    {
        gupiao1->Sell();
        gupiao2->Sell();
        gupiao3->Sell();
        guozhai->Sell();
        fangdichan->Sell();
    }
};

int main()
{
    Fund *jijin = new Fund();

    jijin->BuyFund();
    cout << endl << "Two years later......\n" << endl;
    jijin->SellFund();

    return 0;
}

C

c 复制代码
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    void (*Sell)();
    void (*Buy)();
} Invest;

typedef struct
{
    Invest base;
} Stock;

/**********************************************************/
void Stock1_Sell()
{
    printf("股票1卖出\n");
}

void Stock1_Buy()
{
    printf("股票1买入\n");
}

Stock *createStock1()
{
    Stock *s = (Stock *)malloc(sizeof(Stock));
    s->base.Sell = Stock1_Sell;
    s->base.Buy = Stock1_Buy;
    return s;
}
/**********************************************************/
typedef struct
{
    Invest base;
} Stock2;

void Stock2_Sell()
{
    printf("股票2卖出\n");
}

void Stock2_Buy()
{
    printf("股票2买入\n");
}

Stock2 *createStock2()
{
    Stock2 *s = (Stock2 *)malloc(sizeof(Stock2));
    s->base.Sell = Stock2_Sell;
    s->base.Buy = Stock2_Buy;
    return s;
}
/**********************************************************/
typedef struct
{
    Invest base;
} Stock3;

void Stock3_Sell()
{
    printf("股票3卖出\n");
}

void Stock3_Buy()
{
    printf("股票3买入\n");
}

Stock3 *createStock3()
{
    Stock3 *s = (Stock3 *)malloc(sizeof(Stock3));
    s->base.Sell = Stock3_Sell;
    s->base.Buy = Stock3_Buy;
    return s;
}
/**********************************************************/
typedef struct
{
    Invest base;
} NationalDebt1;

void NationalDebt1_Sell()
{
    printf("国债1卖出\n");
}

void NationalDebt1_Buy()
{
    printf("国债买入\n");
}

NationalDebt1 *createNationalDebt1()
{
    NationalDebt1 *s = (NationalDebt1 *)malloc(sizeof(NationalDebt1));
    s->base.Sell = NationalDebt1_Sell;
    s->base.Buy = NationalDebt1_Buy;
    return s;
}
/**********************************************************/
typedef struct
{
    Invest base;
} Realty1;

void Realty1_Sell()
{
    printf("房地产卖出\n");
}

void Realty1_Buy()
{
    printf("房地产3买入\n");
}

Realty1 *createRealty1()
{
    Realty1 *s = (Realty1 *)malloc(sizeof(Realty1));
    s->base.Sell = Realty1_Sell;
    s->base.Buy = Realty1_Buy;
    return s;
}
/**********************************************************/
typedef struct
{
    Stock *gupiao1;
    Stock2 *gupiao2;
    Stock3 *gupiao3;
    NationalDebt1 *guozhai;
    Realty1 *fangdichan;
} Fund;

Fund *createFund()
{
    Fund *fund = (Fund *)malloc(sizeof(Fund));
    fund->gupiao1 = createStock1();
    fund->gupiao2 = createStock2();
    fund->gupiao3 = createStock3();
    fund->guozhai = createNationalDebt1();
    fund->fangdichan = createRealty1();
    return fund;
}

void BuyFund(Fund *fund)
{
    fund->gupiao1->base.Buy();
    fund->gupiao2->base.Buy();
    fund->gupiao3->base.Buy();
    fund->guozhai->base.Buy();
    fund->fangdichan->base.Buy();
}

void SellFund(Fund *fund)
{
    fund->gupiao1->base.Sell();
    fund->gupiao2->base.Sell();
    fund->gupiao3->base.Sell();
    fund->guozhai->base.Sell();
    fund->fangdichan->base.Sell();
}

int main()
{
    Fund *jijin = createFund();

    BuyFund(jijin);
    printf("\nTwo years later...\n\n");
    SellFund(jijin);

    free(jijin->gupiao1);
    free(jijin->gupiao2);
    free(jijin->gupiao3);
    free(jijin->guozhai);
    free(jijin->fangdichan);
    free(jijin);

    return 0;
}

总结

相关推荐
繁星十年19 分钟前
《C++20设计模式》命令模式思考
设计模式·命令模式·c++20
安步当歌7 小时前
【FFmpeg】av_write_trailer函数
c语言·c++·ffmpeg·视频编解码·video-codec
明戈戈9 小时前
设计模式-模板方法模式
设计模式·模板方法模式
python资深爱好者9 小时前
在什么情况下你会使用设计模式
设计模式
HanLop9 小时前
C语言-动态内存管理
c语言·开发语言
EthanWsir9 小时前
嵌入式C语言面试相关知识——关键字(不定期更新)
c语言·开发语言·面试
我们的五年11 小时前
【算法:贪心】:贪心算法介绍+基础题(四个步骤);柠檬水找零(交换论证法)
c语言·数据结构·c++·算法·贪心算法
龙迅代理(jiuli)11 小时前
LT8711GX 国产芯片 Type-C/DP1.4转HDMI2.1 用于加密狗 对接站
c语言·开发语言
PingCAP13 小时前
Dify + TiDB Vector,快速构建你的AI Agent
数据库·人工智能·设计模式
鞥牧魂人13 小时前
C-I-O和多线程
c语言·c++·算法