23 DesignPatterns学习笔记:C++语言实现 --- 2.5 Factory
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的更多相关文章
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy
23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy 2016-07-18 (www.cnblogs.com/icmzn) 模式理解
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.6 Facade
23 DesignPatterns学习笔记:C++语言实现 --- 2.6 Facade 2016-07-22 (www.cnblogs.com/icmzn) 模式理解
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.4 Composite
23 DesignPatterns学习笔记:C++语言实现 --- 2.4 Composite 2016-07-22 (www.cnblogs.com/icmzn) 模式理解
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter
23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter 2016-07-22 (www.cnblogs.com/icmzn) 模式理解
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.1 Bridge
23 DesignPatterns学习笔记:C++语言实现 --- 2.1 Bridge 2016-07-22 (www.cnblogs.com/icmzn) 模式理解
- 23 DesignPatterns学习笔记:C++语言实现 --- 1.5 Prototype
23 DesignPatterns学习笔记:C++语言实现 --- 1.5 Prototype 2016-07-21 (www.cnblogs.com/icmzn) 模式理解
- 23 DesignPatterns学习笔记:C++语言实现 --- 1.4 Builder
23 DesignPatterns学习笔记:C++语言实现 --- 1.4 Builder 2016-07-21 (www.cnblogs.com/icmzn) 模式理解
- 23 DesignPatterns学习笔记:C++语言实现 --- 1.3 Singletion
23 DesignPatterns学习笔记:C++语言实现 --- 1.3 Singletion 2016-07-21 (www.cnblogs.com/icmzn) 模式理解
- 23 DesignPatterns学习笔记:C++语言实现 --- 1.2 AbstractFactory
23 DesignPatterns学习笔记:C++语言实现 --- 1.2 AbstractFactory 2016-07-21 (www.cnblogs.com/icmzn) 模式理解
随机推荐
- 【linux】linux权限管理
一.权限的基本概念 权限:访问计算机资源或服务的访问能力. Linux中,每一个资源或者服务的权限, ...
- 手淘flexible.js框架使用和源代码讲解
手淘框架是一个用来适配移动端的js框架,下面我们来讲解一下如何使用手淘的这套框架. 其实手淘框架的核心原理就是根据不同的width给网页中html跟节点设置不同的font-size,然后所有的距离大小 ...
- C语言 字符串处理函数 转自 http://blog.chinaunix.net/uid-25885064-id-3175049.html
C字符串处理函数 2012-04-13 18:14:16 分类: C/C++ void *memccpy (void *dest, const void *src, int c, size_t n) ...
- WinForm各浏览器内核控件
WebKit.NET webkit-sharp CefSharp awesomium OpenWebKitSharp geckofx MozNet Web Component
- [转][ASP.net]后台页面刷新
三种后台刷新页面的方法: // 刷新方法一 Response.AddHeader("); // 刷新方法二 Response.Write("<script language= ...
- --- no python application found, check your startup logs for errors
--- no python application found, check your startup logs for errors 碰到这个问题,请留意下系统执行的python版本和自己的djan ...
- FDStoredProc 存储过程控件 强
//FireDAC FDStoredProc1->StoredProcName = "myReport1"; FDStoredProc1->Prepare(); FDS ...
- Nginx 实现 IP+项目名 访问
参考: https://blog.csdn.net/csdn1152789046/article/details/51362735 修改前 项目放在Tomcat的webapps/ROOT/ 目录下面 ...
- Hadoop之MapReduce学习笔记(二)
主要内容: mapreduce编程模型再解释: ob提交方式: windows->yarn windows->local : linux->local linux->yarn: ...
- php7源码编译安装
以下以CentOS 7.2为例,安装php的运行环境,首先打开php官网http://php.net/点击导航栏的Downloads进入下载页面:http://php.net/downloads.ph ...