1.泡妞与设计模式合成模式

Posted 喵小喵~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");
}

 

以上是关于1.泡妞与设计模式合成模式的主要内容,如果未能解决你的问题,请参考以下文章

4.泡妞与设计模式 原型模式

9.泡妞与设计模式(10) 访问者模式

设计模式软件设计七大原则 ( 合成复用原则 | 代码示例 )

设计模式---合成模式

go语言设计模式-合成复用原则

何时使用活动转换与动态片段的模式