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. sql server获取插入记录后的ID

    select @@IDENTITY --返回为当前会话的所有作用域中的任何表最后生成的标识值. select IDENT_CURRENT('table_name') --返回为任何会话和任何作用域中的 ...

  2. emacs之配置自动安装脚本

    emacsConfig下建立install目录,结构大概这样 . ├── auto-complete-etags-setting.el ├── auto-complete-setting.el ├── ...

  3. Android中Parcelable与Serializable接口用法

    转自: Android中Parcelable接口用法 1. Parcelable接口 Interface for classes whose instances can be written to a ...

  4. [转][Dapper]SQL 经验集

    condition.Append(" AND ChineseName like @name"); p.Add("@name", "%" + ...

  5. 在 Laravel 5 中集成七牛云存储实现云存储功能(非上传)

    本扩展包基于https://github.com/qiniu/php-sdk开发,是七牛云储存 Laravel 5 Storage版,通过本扩展包可以在Laravel 5中集成七牛云存储功能. 1.安 ...

  6. linux centos 6.1 安装 redis

    1, yum install redis 检测是否有redis 2,没有的话就运行:yum install epel-release 3,再执行 yum install redis

  7. Python——截取web网页长图

    # -*- coding: utf8 -*-import timeimport xlrdfrom selenium import webdriver def read_excel(filename): ...

  8. -bash: /usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory

    -bash: /usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory python多版本造成额问题 找不到p ...

  9. 535. Encode and Decode TinyURL

    ▶ 要求给出一种对 URL 网址进行压缩和解压的算法,例如 https://leetcode.com/problems/design-tinyurl ←→ http://tinyurl.com/4e9 ...

  10. 跟我学算法-PCA(降维)基本原理推导

    Pca首先 1.对数据进行去均值 2.构造一个基本的协方差矩阵1/m(X)*X^T 3对协方差矩阵进行变化,得到对角化矩阵,即对角化上有数值,其他位置上的数为0(协方差为0),即求特征值和特征向量的过 ...