23 DesignPatterns学习笔记:C++语言实现 --- 2.5 Factory

2016-07-18

(www.cnblogs.com/icmzn)


模式理解

 

1. Flyweight 模式,即享元(共享单元)模式
    Flyweeight是拳击比赛中的特有名词,称为“特轻量级别”,则在设计模式中指的的是类要轻量、类的粒度要细,可以实现细粒度类的复用,但没有
缺乏共享的机制,即多线程下类不可复用。
    享元模式,是“池技术”的重要实现方式,但二者并不等价。使用享元模式可以支持大量的细粒度的对象的共享。
    因为创建太多的对象到程序中有损程序的性能,可以采用享元模式的共享技术,将对象视为为“细粒度对象”然后实现“共享对象”。
细粒度对象是指对象的数量多且性质相近,可以将对象的信息分为“内部状态intrinsic”“外部状态extriinsic”.
内部状态Intrinsic:是对象可共享的信息,存储在具体享元对象的内部,
外部状态Extrinsic:则是被作为一个标记,因为外部状态是根据外部条件制定的标记分类,所以外部状态会随环境改变而改变,所以这部分信息
    一般来说Flyweight可以分为如下4个角色:
(1)AbsFlyweight,抽象享元角色(共享单元)
    就是一个共享单元的抽象行为属性,一般为抽象类,在项目中可能是一个具体类,一般可以把外部状态和内部状态先定义(实现)出来,避免了
派生类中的随意扩展。
(2)ConcreteflyWeight, 具体的享元角色(内部状态初始化)
    具体的一个产品类,实现AbsFlyweight的抽象方法或业务逻辑。完成内部属性的各种个性化操作。
(3)UnshareFlyweight, 不可共享的享元角色(在设计模式中没有体现)
    不能够使用共享技术的对象,该对象一般不出现在享元工厂中。
(4)FlyweightFactory, 享元工厂
    构造一个池容器,同时根据享元中的外部属性最为Key值,搜索池容器中缓冲的向原对象。

2. Flyweight 优点

3. Flyweight 适用场景
(1)使一些细粒度的对象可以共享,采用享元模式。

4. Flyweight 讨论


程序实现(C++)


(1)模板应用

(2)输出展示

 

23 DesignPatterns学习笔记:C++语言实现 --- 2.5 Factory的更多相关文章

  1. 23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy

    23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy 2016-07-18 (www.cnblogs.com/icmzn) 模式理解

  2. 23 DesignPatterns学习笔记:C++语言实现 --- 2.6 Facade

    23 DesignPatterns学习笔记:C++语言实现 --- 2.6 Facade 2016-07-22 (www.cnblogs.com/icmzn) 模式理解

  3. 23 DesignPatterns学习笔记:C++语言实现 --- 2.4 Composite

    23 DesignPatterns学习笔记:C++语言实现 --- 2.4 Composite 2016-07-22 (www.cnblogs.com/icmzn) 模式理解

  4. 23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter

    23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter 2016-07-22 (www.cnblogs.com/icmzn) 模式理解

  5. 23 DesignPatterns学习笔记:C++语言实现 --- 2.1 Bridge

    23 DesignPatterns学习笔记:C++语言实现 --- 2.1 Bridge 2016-07-22 (www.cnblogs.com/icmzn) 模式理解  

  6. 23 DesignPatterns学习笔记:C++语言实现 --- 1.5 Prototype

    23 DesignPatterns学习笔记:C++语言实现 --- 1.5 Prototype 2016-07-21 (www.cnblogs.com/icmzn) 模式理解

  7. 23 DesignPatterns学习笔记:C++语言实现 --- 1.4 Builder

    23 DesignPatterns学习笔记:C++语言实现 --- 1.4 Builder 2016-07-21 (www.cnblogs.com/icmzn) 模式理解

  8. 23 DesignPatterns学习笔记:C++语言实现 --- 1.3 Singletion

    23 DesignPatterns学习笔记:C++语言实现 --- 1.3 Singletion 2016-07-21 (www.cnblogs.com/icmzn) 模式理解  

  9. 23 DesignPatterns学习笔记:C++语言实现 --- 1.2 AbstractFactory

    23 DesignPatterns学习笔记:C++语言实现 --- 1.2 AbstractFactory 2016-07-21 (www.cnblogs.com/icmzn) 模式理解  

随机推荐

  1. 黄聪:Wordpress程序Mysql查询导致CPU100%,页面错误增量飙高解决方案

    最近做的网站,访客一多,CPU就会飙到100%,找了网上很多解决方案,用了下面的方法进行优化: 1.mysql开启慢查询方法: 在my.ini的[mysqld]添加如下语句: log-slow-que ...

  2. 《js笔记》

    1.判断浏览器是否启用cookie: if (navigator.cookieEnabled==true) { alert("已启用 cookie") } else { alert ...

  3. [Winform][C#]获取系统颜色预定义颜色和现有字体集

    转自: http://zhidao.baidu.com/link?url=ozY7tJRNBYHUsImE6jn1psqc8owib7MWcDMEmZw48q8iD9Hz9MWgnQQcBDO0VYO ...

  4. 二.jQuery源码解析之构建jQuery之构建函数jQuery的7种用法

    一:$(selectorStr[,限制范围]),接受一个选择器(符合jQuery规范的字符串),返回一个jQuery对象; 二:$(htmlStr[,文档对象]),$(html[,json对象])传入 ...

  5. 使用Spring发送Email

    配置Spring发送邮件 Spring发送邮件底层还是使用JavaMail,我在http://www.cnblogs.com/lz2017/p/6882925.html 中记录过关于JavaMail的 ...

  6. Windows 远程桌面连接Ubuntu16.04图像界面

    1.安装xrdp sudo apt-get install xrdp 2. 安装vnc4server sudo apt-get install vnc4server 3. 安装xubuntu-desk ...

  7. Synergy使用(安装及配置)

    最近在看一篇文章,找到了一款符合我需求的软件:Synergy. Synergy可以在多台电脑上进行鼠标与键盘及剪贴板(只能共享文本)的共享.不用每台电脑都插上这些外设了... 共享文件可以参看微软出品 ...

  8. django-admin添加权限

    后台manage页面: 可以通过用户直接添加权限,如果需要添加多个权限,则可以通过组,先将多个权限添加个组(总经理,秘书),在个用户添加这个组(总经理,秘书).  代码实现: 实际就是添加多对多的关系 ...

  9. memcached配置 (初级)以及测试

    一.memcached安装 memcached依赖 $ sudo apt-get install libevent-dev   安装memcached服务 $ sudo apt-get install ...

  10. sed你所不知道的语法

    测试内容