设计模式学习 之 简单工厂模式
2015-12-28 23:25
405 查看
有幸看到园友推荐的 《大话设计模式》十分感谢,准备练习一下,以免忘记。
设计模式 需要灵活运用,不能为了 设计而设计,这样就得不偿失了。
23种设计模式 分为 三大类型
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。
简单工厂模式 又叫做 静态方法 模式 ,不在 23 种 设计模式之内 。是项目中最简单实用的 模式。它避免了大量的 代码 写在 一起 造成的 项目混乱,实现了简单的分层。
可以使用户只关心 使用 ,传入参数 调用方法。 缺点 是 大量的 业务 逻辑 处理 写在同一个 工厂 内, 当 需求发生 变动时,需要去修改工厂内的方法,这样违反了开放封闭原则。
写个例子:输入 一个数字 ,根据 数字 大小 对它 进行 ,一倍, 两倍 ,3倍 , 加 3 的 操作 ;
前台代码
如果我知道了 调用的功能,可以不用 关心 调用方法是谁写的,怎么实现的,只需 选择 我要使用的 方法 ,赋值
公共操作类
View Code
遇到的问题: 注意虚方法 父类 使用 virtual 可以让任何派生类 改写 函数 派生类 重写父类方法 要 使用 override
设计模式 需要灵活运用,不能为了 设计而设计,这样就得不偿失了。
23种设计模式 分为 三大类型
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。
简单工厂模式 又叫做 静态方法 模式 ,不在 23 种 设计模式之内 。是项目中最简单实用的 模式。它避免了大量的 代码 写在 一起 造成的 项目混乱,实现了简单的分层。
可以使用户只关心 使用 ,传入参数 调用方法。 缺点 是 大量的 业务 逻辑 处理 写在同一个 工厂 内, 当 需求发生 变动时,需要去修改工厂内的方法,这样违反了开放封闭原则。
写个例子:输入 一个数字 ,根据 数字 大小 对它 进行 ,一倍, 两倍 ,3倍 , 加 3 的 操作 ;
前台代码
public static void Main(string[] args) { FactortMethod factory = new FactortMethod(); for (int i = 0; i < 5; i++) { int num = Convert.ToInt32(Console.ReadLine()); Operation oper; oper = factory.Creat(num); oper.InputNum = num; Console.WriteLine(oper.OpenSoftWare()); } }
如果我知道了 调用的功能,可以不用 关心 调用方法是谁写的,怎么实现的,只需 选择 我要使用的 方法 ,赋值
公共操作类
public class FactortMethod { public Operation Creat (int num) { if(num < 10) { return new FactoryOperationOrigin(); } else if(num > 10 && num < 30) { return new FactoryOperationTwo_Times(); } else if(num > 30 && num < 60) { return new FactoryOperationThere_Times(); } else { return new FactoryOperationAddThere(); } } } }
View Code
遇到的问题: 注意虚方法 父类 使用 virtual 可以让任何派生类 改写 函数 派生类 重写父类方法 要 使用 override
相关文章推荐
- auto_ptr基本用法和实现的整理
- 第二百七十天 how can I 坚持
- Install OpenStack Kilo
- 高振啊!闲来无事多读读 考研失败总结
- 微信redirect-uri参数错误 的解决办法
- APlayerController继承关系图
- Jsp学习笔记:javaBean属性命名规范
- 我的MYSQL学习心得(十五) 日志
- 我对读博和金融专业的一些认识
- 【代码提取】提取一个文件夹里面的所有Java文件的类名函数名和变量名
- 史密斯夫妇握手问题
- java后台接收数据
- 数据结构课程设计-12月28日
- 搭建cocos 开发环境中的那些坑
- 代码优化之减少重复代码-实践
- 异步编程 In .NET
- C++四种类型转换
- C的Trim()函数
- Orchard分类Taxonomies图文教程
- ubuntu14.04安装g++