Understand one Simple Factory Pattern
Keywords: Factory Pattern, Design Pattern
在网上经常会看到有关Factory Pattern的文章, 今天我也在blog上发表一下对一个非常简单Factory pattern的见解.
Factory模式其实就是为了封装系统的变化点, 将变化点集中在一起, 一旦这些变化点真的发生变化时, 只要修改一处代码就可以了.
一图胜万言, figure1是表述这样的一个应用: (1)用户选择一个压缩文件, 然后解压. (2)用户选择一个压缩文件, 然后将它转换成自解压格式. 面对这样的需求, 我们该做什么样的结构设计呢?
figure1
初步设计是: 目前流行的压缩格式有zip和rar等. 我们会抽象一个压缩格式处理器这样的基类(命名为CompressBase), 不同压缩格式的解压和压缩算法不同, 所以我们又会设计出CompressBase的几个派生类, 比如ZipCompress和RarCompress. 用户可能会选择一个zip文件需要我们处理, 也可能选择一个rar文件. 在程序中, 到底要实例化哪个派生类呢? 一个简单的方法是, 通过文件的扩展名, 作为判断的依据. 最开始, 实现Scenario A中的代码为:
public void Decompress(string fileName)
{
CompressBase compressObj=null ;
string fileExtenstion= FileHelper.GetExtension(fileName) ;
switch (fileExtenstion)
{
case "zip":
{
compressObj= new ZipCompress(fileName);
break ;
}
case "rar"
{
compressObj= new ZipCompress(fileName);
break ;
}
default:
{
return ;
}
}
//uncompress the file
compressObj.Decompress() ;
}
同样, 在实现Scenario B的MakeSelfExe()也和上面代码相似. 这样做有什么问题呢? 问题之一, 如果系统要增加对7zip格式的支持, 需要修改所有生成CompressBase对象的地方. 问题之二, 如果我们不采用通过文件扩展名来判断压缩格式的方法, 而是采用更好的算法时, 也需要在程序中到处修改生成CompressBase对象的代码.
较好的设计方案是: 设计一个Factory类, 它具有一个静态的CreateInstance(string fileName), 该方法封装了生成CompressBase类的算法. 刚开始可以继续采用根据扩展名来生成不同的CompressBase子类. 在要生成 即使将来更新算法或增加新的压缩格式, 也只需要更新CreateInstance().
适用性:
(1) 如果可以确定一个系统中, 仅有Scenario A这个场合, 不会有其他类似的功能, 就没有必要使用这种模式.
(2) 对于Scenario A, 这个场景的入口是唯一的. 如果操作的入口和派生类的个数一样的话, 也没有必要使用这种模式, 比如在画图程序中, 虽然Triangle类和Rectangle类都是Shape类的子类, 但画图程序的工具面板上有画三角和矩形两个ToolButton, 也没有必要再创建一个Factory类来负责生成派生类对象.
转载于:https://www.cnblogs.com/harrychinese/archive/2011/08/28/2156481.html
Understand one Simple Factory Pattern相关推荐
- Net设计模式之简单工厂模式(Simple Factory Pattern)
一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实 ...
- 设计模式(1):简单工厂模式(Simple Factory Pattern)
1. 从一个简单的例子开始 在众多的设计原则中,有一条原则是这么说的:要针对接口编程,不要针对实现编程. 针对接口编程的话,可以使用不同的实现类来创建这个对象.比如需要一个List: List< ...
- 简单工厂模式(Simple Factory Pattern)
前言 学习难度:★★☆☆☆ 使用频率:★★★☆☆ 学会它. 开始吧 模式名称 中文:简单工厂模式 English: Simple Factory Pattern 含义:简单工厂模式专门定义一个类来负责 ...
- 设计模式之简单工厂模式(Simple Factory Pattern)
什么是简单工厂模式? 以下内容来自 ChatCPT 的回答: 简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,其主要目的是将对象的创建过程封装在一个单独的类中,以便于 ...
- 简单工厂模式:Simple Factory Pattern(转自阿良.NET)
简单工厂(Simple Factory)模式 Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个公共的父类和公共的方法. Simple Fact ...
- C#设计模式(4)-Simple Factory Pattern
工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类.工厂模式有以下几种形态: 简单工厂(Simple Factory)模式 工厂方法(F ...
- 秒懂设计模式之简单工厂模式(Simple Factory Pattern)
版权申明]非商业目的可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/86634864 出自:shusheng007 设计模式 ...
- 进阶学习(3.1) Simple Factory Pattern 简单工厂模式
1,设计原则 工厂和工厂对象尽量都是高内聚的, 例如网上最多的例子, 支付案例, 一个支付工厂, 可以创建微信支付对象, 也可以创建支付宝支付对象, 他们都是属于支付 这样方便别人理解, 和代码重构, ...
- 【设计模式 01】简单工厂模式(Simple factory pattern)
简单工厂模式 可以根据参数的不同返回不同类的实例 参考: CSDN|简单工厂模式 简单工厂通过传给工厂类的参数的不同,返回不同的对象,包括三部分组成: 具体的"产品" 工厂类(实例 ...
最新文章
- cluster maintain manager Software群集管理软件
- ListView 常用属性
- 读书笔记 《Perl语言入门》 Day 1
- 16款优秀的Vue UI组件库推荐
- Gym101128F:Landscaping
- ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记
- RowVersion字段从SqlServer到PostgreSQL的迁移
- 职业技术人士学习捷径最快的网站
- 阿里高级技术专家箫逸:如何画好一张架构图?
- python坐标定位_Python_元素定位浏览器坐标定位
- 关闭迅雷“XLServicePlatform”服务 防止导致Win8假死
- Python build-in数据类型之字符串str (一)
- 【云存储】大容量网盘的介绍与选择
- Qt 之 打开pdf文件
- 使用Substrate开发区块链存证dApp
- Unity插入视频音频
- 【WPS在线文档转换】
- 2022-2028中国聚合物增材制造系统市场现状研究分析与发展前景预测报告
- 隐藏账户的排除、D盾的使用
- [幻灯片]软件需求设计方法学全程实例剖析-01-概述
热门文章
- Hive学习笔记 —— Hive的管理
- 单链表倒数第K个节点的查找和显示
- (转载)简单linux C++内存池
- Receiver ED、Link quality indicator (LQI)、Clear channel assessment (CCA)究竟是什么?802.15.4标准
- 哭了,复现TensorFlow版本MAE的shuffle和reshuffle
- 字符串去掉两端的引号_Python3.7知其然知其所以然-第六章 字符串
- 赋值运算符||位运算符||三元运算符
- java的知识点23——泛型Generics、Collection接口、List特点和常用方法、 ArrayList特点和底层实现
- 矩阵乘法的四种理解方式
- matlab条件判断配合输出