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) 模式理解
随机推荐
- vs2005+WinCE模拟器+ActiveSync调试WinCE程序
来源:http://www.cnblogs.com/xjimmyshcn/archive/2011/07/19/2111087.html 一.WinCE 模拟器通过ActiveSync 6.1(即Wi ...
- 今日头条、抖音、西瓜、火山、微视、陌陌等自媒体平台小视频批量下载工具v1.1.0(视频搬运福利)
前言 目前各大自媒体平台爆火,网络流量暴涨,各大自媒体平台的小视频为广大个广告主带来了如泉涌般的的视频流量,更给广大的自媒体小编带来了丰厚的利益回报,想要创做更多的自媒体内容着实不易,下面给广大的小视 ...
- MapBuilder,操作集合工具类
public class MapBuilder { /** * Creates an instance of {@code HashMap} */ public static <K, V> ...
- [html][javascript] 正则匹配示例
var str="akdlfaklhello 1234klfd1441ksalfd9000kals8998j2345fd;lsa"; var reg = new RegExp(/( ...
- Codeforces Round #456 B题
一.题意 给你一个n和一个k,让你从[1, n]区间内选k个数,这k个数异或和最大. 二.思路 我一开始看到这种题,不自觉地就想到,莫非又要搞很复杂的线段树.主席树?貌似还有些难搞啊.然而事实是:Co ...
- Eclipse Android 代码自动提示功能 +导入 epf
1.设置 java 文件的代码提示功能 打 开 Eclipse 依次选择 Window > Preferences > Java > Editor - Content Assist ...
- multipart/form-data boundary 说明
含义 ENCTYPE="multipart/form-data" 说明: 通过 http 协议上传文件 rfc1867协议概述,jsp 应用举例,客户端发送内容构造 1.概述在最初 ...
- js 和 java互调
Java调JS JDK1.8 中Nashorn 比JavaScript性能更好 public static void main(String[] args) { long s = System.cur ...
- linux命令之scp远程文件复制
scp是linux中功能最强大的文件传输命令,可以实现从本地到远程以及远程到本地的轻松文件传输操作.下面简单的讲解一些关于scp命令的操作,给有用的人一些参考: 首先是本地到远程的操作:操作的格式如下 ...
- js中创建table表格
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...