• 1.泡妞与设计模式(二)合成模式


    合成模式

    合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。

    Mary今天过生日。“我过生日,你要送我一件礼物。”“嗯,好吧,去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买。”“喂,买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。”“……”,MM都会用Composite模式了,你会了没有?

    完整代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <Windows.h>
    
    #include <atlstr.h>
    #include <sphelper.h>
    #include <sapi.h>
    #include <compstui.h>
    #include <string.h>
    //语音函数
    #pragma comment(lib,"sapi.lib")
    #pragma comment(lib,"comsupp.lib")
    #pragma comment(lib,"ole32.lib")
    
    //函数指针
    void(*p)(wchar_t *str) = NULL;
    
    //语音说出来
    void speak(wchar_t *str)
    {
        ISpVoice *pVoice = NULL;
        ::CoInitialize(NULL);
        //获取ISpVoice接口
        long hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
        if (FAILED(hr))
        {
            MessageBox(NULL, "CoCreateInstance失败!", "错误", 0x10010);
            return;
        }
        hr = pVoice->Speak(str, 0, NULL);
        pVoice->Release();
        pVoice = NULL;
        //千万不要忘记
        ::CoUninitialize();
    }
    
    //输出到屏幕
    void print(wchar_t *str)
    {
        wprintf(L"%ls", str);
    }
    
    //对话框显示
    void show(wchar_t *str)
    {
        MessageBoxW(NULL, L"i love you", str, NULL);
    }
    
    //接口固定,对一串文字执行不同的操作
    void factory(void(*pfun)(wchar_t *str),wchar_t *pstr)
    {
        p = pfun;
        p(pstr);
    }
    
    //合成模式
    void merge(void(**pp)(wchar_t *str), int n,wchar_t *str)
    {
        for (int i = 0; i < n; i++)
        {
            (*(pp+i))(str);
        }
    }
    
    
    void main()
    {
        setlocale(LC_ALL, "zh-CN");
    
        void (*pp[3])(wchar_t *str) = { print,show,speak };
        int n = sizeof(pp) / sizeof(void *);
        while (1)
        {
            //factory(show, L"老板来四个鸡腿");
            merge(pp,n,L"i love you");
            system("pause");
        }
    
        system("pause");
    }
  • 相关阅读:
    Array对象
    属性描述对象
    Object对象
    console对象与控制台
    编程风格
    错误处理机制
    13、百钱买百鸡之数学优化
    12、c程序中编程,统计一行中数字字符的个数。
    10、输入某年某月某日,判断这一天是这一年的第几天?
    9、c语言输入一个整数怎么分别输出它的每位上的数字
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8531544.html
Copyright © 2020-2023  润新知