创建型-工厂方法factory method
2016-01-11 21:22
344 查看
定义一个用于创建工厂的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类
增加一个产品时,需要添加一个产品类和一个产品工厂类
FactoryMethod.cs
using System; using System.Collections.Generic; using System.Text; namespace 工厂方法_计算器 { /// <summary> /// 运算类 /// </summary> class Operation { private double _numberA = 0; private double _numberB = 0; public double NumberA { get { return _numberA; } set { _numberA = value; } } public double NumberB { get { return _numberB; } set { _numberB = value; } } /// <summary> /// 得到运算结果 /// </summary> /// <returns></returns> public virtual double GetResult() { double result = 0; return result; } } /// <summary> /// 加法类 /// </summary> class OperationAdd : Operation { public override double GetResult() { double result = 0; result = NumberA + NumberB; return result; } } /// <summary> /// 减法类 /// </summary> class OperationSub : Operation { public override double GetResult() { double result = 0; result = NumberA - NumberB; return result; } } /// <summary> /// 乘法类 /// </summary> class OperationMul : Operation { public override double GetResult() { double result = 0; result = NumberA * NumberB; return result; } } /// <summary> /// 除法类 /// </summary> class OperationDiv : Operation { public override double GetResult() { double result = 0; if (NumberB == 0) throw new Exception("除数不能为0。"); result = NumberA / NumberB; return result; } } /// <summary> /// 工厂方法 /// </summary> interface IFactory { Operation CreateOperation(); } /// <summary> /// 专门负责生产“+”的工厂 /// </summary> class AddFactory : IFactory { public Operation CreateOperation() { return new OperationAdd(); } } /// <summary> /// 专门负责生产“-”的工厂 /// </summary> class SubFactory : IFactory { public Operation CreateOperation() { return new OperationSub(); } } /// <summary> /// 专门负责生产“*”的工厂 /// </summary> class MulFactory : IFactory { public Operation CreateOperation() { return new OperationMul(); } } /// <summary> /// 专门负责生产“/”的工厂 /// </summary> class DivFactory : IFactory { public Operation CreateOperation() { return new OperationDiv(); } } }
Program.cs
using System; using System.Collections.Generic; using System.Text; namespace 工厂方法_计算器 { class Program { static void Main(string[] args) { IFactory operFactory = new AddFactory(); Operation oper = operFactory.CreateOperation(); oper.NumberA = 1; oper.NumberB = 2; double result=oper.GetResult(); Console.WriteLine(result); Console.Read(); } } }
相关文章推荐
- YARN DistributedShell源码分析与修改
- 【iOS】百叶窗动画
- 关于Fragment 的切换
- 【杭电oj】2504 - 又见GCD(GCD)
- eclipse使用Hibernate tools反向工程插件遇到的几个问题
- 算法导论11:优化后的数组实现的队列 2016.1.11
- 创建型-简单工厂simple factory
- zend中的函数
- 06.Django中用户的两种扩展方式(Profile和AbstractUser)
- Android Fragment应用实战,使用碎片向ActivityGroup说再见
- Android百度地图定位API onReceiveLocation没有调用?
- python数字图像处理(5):图像的绘制
- Arduino接口-week1-Lesson1
- HDU 3374 String Problem
- android listview嵌套viewpager,viewpager嵌套gridview,解决内嵌无法显示以及时间冲突的问题
- 第8章 引用
- BZOJ 1037: [ZJOI2008]生日聚会Party( dp )
- Consumer Client Re-Design (翻译)
- asp.net 下载Excel (数据流,不保存)--客户端
- 最大子序列和问题