C#学习笔记-工厂模式
题目:计算器
解析:工厂方法(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。
定义运算类:
- class Operation
- {
- private double _numberA = ;
- private double _numberB = ;
- public double NumberA
- {
- get
- {
- return _numberA;
- }
- set
- {
- _numberA = value;
- }
- }
- public double NumberB
- {
- get
- {
- return _numberB;
- }
- set
- {
- _numberB = value;
- }
- }
- public virtual double GetResult()
- {
- double result = ;
- return result;
- }
- }
继承于运算类的具体运算的实现:
- class OperationAdd : Operation
- {
- public override double GetResult()
- {
- double result = ;
- result = NumberA + NumberB;
- return result;
- }
- }
- class OperationSub : Operation
- {
- public override double GetResult()
- {
- double result = ;
- result = NumberA - NumberB;
- return result;
- }
- }
- class OperationMul : Operation
- {
- public override double GetResult()
- {
- double result = ;
- result = NumberA * NumberB;
- return result;
- }
- }
- class OperationDiv : Operation
- {
- public override double GetResult()
- {
- double result = ;
- if (NumberB == )
- throw new Exception("除数不能为0");
- result = NumberA / NumberB;
- return result;
- }
- }
工厂方法,接口:
- interface IFactory
- {
- Operation CreateOperation();
- }
工厂方法,分别子类:
- class AddOperation : IFactory
- {
- public Operation CreateOperation()
- {
- return new OperationAdd();
- }
- }
- class SubOperation : IFactory
- {
- public Operation CreateOperation()
- {
- return new OperationSub();
- }
- }
- class MulOperation : IFactory
- {
- public Operation CreateOperation()
- {
- return new OperationMul();
- }
- }
- class DivOperation:IFactory
- {
- public Operation CreateOperation()
- {
- return new OperationDiv();
- }
- }
主函数:
- static void Main(string[] args)
- {
- //工厂模式自己内部确定了改实例化哪个类,所以要发生变动,只需要在最外面这个地方变动即可
- IFactory operFactory = new AddOperation();
- Operation oper = operFactory.CreateOperation();
- oper.NumberA = ;
- oper.NumberB = ;
- double result = oper.GetResult();
- Console.WriteLine(result);
- Console.Read();
- }
注:文中所有代码及知识点均来自于《大话设计模式》,本人属于边学边看边敲代码边总结的阶段。
C#学习笔记-工厂模式的更多相关文章
- 《Head First 设计模式》学习笔记——工厂模式 + 抽象工厂模式
设计模式 工厂模式:定义一个创建对象的接口,但由子类决定要实例化的是哪一个.工厂方法让类把实例化推迟到子类. 所谓的"决定",并非指模式同意子类本身在执行时做决定,而是指在编写创建 ...
- 学习笔记——工厂模式Factory
Product是我们所需要获得的对象,一般的使用中,我们直接通过new获得新对象. 当需要大量获得对象时,每一次都new会很麻烦. <真菌世界>游戏中,一个星球上有很多树,一棵树会不断生成 ...
- Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式
一.概述 1.抽象工厂:当情况是需要产生一系列产品,若需更换产品,则要求一系列产品一起换,且要控制一系列产品的产生过程,此时可考虑抽象工厂模式.例:小明装修屋子,把电视.冰箱都替换掉,他这次需要把电视 ...
- Java-马士兵设计模式学习笔记-工厂模式-简单工厂
一.概述 1.目标:要控制任意类型交通工具的生产模式 2.目标有两层意思(1)任意类型 (2)生产模式,所以对应的,要这两个层面上抽象(Movable,VehicleFactory),利用接口,实现多 ...
- Java-马士兵设计模式学习笔记-工厂模式-用Jdom模拟Spring
一.概述 1.目标:模拟Spring的Ioc 2.用到的知识点:利用jdom的xpath读取xml文件,反射 二.有如下文件: 1.applicationContext.xml <?xml ve ...
- Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件
一.目标:读取properties文件,获得类名来生成对象 二.类 1.Movable.java public interface Movable { void run(); } 2.Car.java ...
- Java-马士兵设计模式学习笔记-工厂模式-单例及多例
一.单例的作用是用于控制类的生成方式,而不让外部类任意new对象 1.Car.java import java.util.ArrayList; import java.util.List; publi ...
- 《Head first设计模式》学习笔记 – 迭代器模式
<Head first设计模式>学习笔记 – 迭代器模式 代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 爆炸性新闻:对象村餐厅和对象村煎饼屋合并了!真是个 ...
- Spring学习13-中IOC(工厂模式)和AOP(代理模式)的详细解释
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC是工厂模式参考:设计模式- ...
随机推荐
- arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++: Command not found 解决方法
执行下列命令时: ndk-build -j16 出现如下错误: Android NDK: WARNING: Ignoring unknown import directory: jni/../../. ...
- intellij idea svn使用一 导入、更新、提交、解决冲突
大体上是转载,针对版本14有一些特殊的添加. 查看svn的资源库: 下面的多出了一个svn的窗口,在左边有加号可以添加一个svn的库 输入svn的地址,我用的是本地的测试,所以地址为svn://127 ...
- 2017年国内常用的公共NTP服务
安卓机顶盒里常用的 http://cn.pool.ntp.org CERNET 的一堆服务器就在那里面 http://asia.pool.ntp.org 追踪它的IP,台湾.韩国.日本都有. 阿里云 ...
- 【python】入门:打印字符串、简单计算
- Swift3.0 自定义tableView复用cell 的写法,与CollectionViewCell的不同,数据model
Model数据 class HospitalModel: NSObject { //后边不赋值 会报错 var imgurl :String = "" var introducti ...
- 函数的非固定参数-Day3
一.函数非固定参数 1.默认函数,我们在传参之前,选给参数指定一个默认的值.默认参数特点是非必须传递的. def test(x,y=2): print(x) print(y) print(" ...
- Xamarin截取/删除emoji表情bug解决方案
大家都知道,一个英文=1字节,一个汉字2字节,而一个emoji表情=4个字节,在有这三种混用的时候,比如app聊天界面,那么删除和截取便成了很头痛的事情. 问题描述 截取导致乱码,如下图: 解决方案 ...
- Java 哲学家进餐
某次操作系统实验存档.V 这个哲学家除了吃就知道睡.( ╯□╰ ) 哲学家.java: package operating.entity.philosophyeating; import operat ...
- bzoj 3999: [TJOI2015]旅游
Description 为了提高智商,ZJY准备去往一个新世界去旅游.这个世界的城市布局像一棵树.每两座城市之间只有一条路径可 以互达.每座城市都有一种宝石,有一定的价格.ZJY为了赚取最高利益,她会 ...
- js中的call()方法与apply()方法
摘自:http://blog.csdn.net/chelen_jak/article/details/21021101 在web前端开发过程中,我们经常需要改变this指向,通常我们想到的就是用cal ...