• 4.泡妞与设计模式(四)享元模式


    FLYWEIGHT 享元模式

    享元模式:FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部,不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态,它们是相互独立的。将可以共享的状态和不可以共享的状态从常规类中区分开来,将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象,而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度的降低内存中对象的数量。(简单点说就是不同的对象调用同样的功能函数)

    每天跟MM发短信,手指都累死了,最近买了个新手机,可以把一些常用的句子存在手机里,要用的时候,直接拿出来,在前面加上MM的名字就可以发送了,再不用一个字一个字敲了。共享的句子就是Flyweight,MM的名字就是提取出来的外部特征,根据上下文情况使用。

    代码示例

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <Windows.h>
     4 #include <locale.h>
     5 
     6 //定制结构体与函数,可以实现调用
     7 struct messages
     8 {
     9     wchar_t *name;
    10     wchar_t *message_str;
    11     void(*p)(struct messages *pmsg);
    12 };
    13 
    14 //最终调用的函数
    15 void print(wchar_t *wstr)
    16 {
    17     wprintf(L"%ls
    ", wstr);
    18 }
    19 
    20 //定制消息
    21 void dingzhi(struct messages *pmsg)
    22 {
    23     wchar_t wstr[300] = { 0 };
    24     wsprintf(wstr, L"%ls:%ls", pmsg->name, pmsg->message_str);
    25     print(wstr);
    26 }
    27 
    28 void main()
    29 {
    30     setlocale(0, "zh-CN");
    31     wchar_t name[8] = L"小王";
    32     wchar_t msg[200] = L"你好";
    33     struct messages message1 { name, msg, dingzhi};
    34     //实现换一个名字其他都正常
    35     wcscpy(name, L"小李");
    36     //自己定制
    37     message1.p(&message1);
    38 
    39     system("pause");
    40 }
  • 相关阅读:
    2017-12-25
    oracle 创建表,增加修改删除字段
    jqxWidgets 常用代码
    Oracle初始化用户-表空间-权限
    Oracle 切换数据库实例
    ORE(Oracle R Enterprise)安装步骤
    Java 枚举类的基本使用
    Java可变参数
    java的封箱和拆箱
    spring 九种设计模式
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8531676.html
Copyright © 2020-2023  润新知