3.Factory Method 工厂方法模式(创建型模式)
1.定义:
/// <summary>
/// 工厂方法
/// </summary>
public abstract class Factory
{
public abstract Compute GetCompute();
} public class AddFactory : Factory
{
public override Compute GetCompute()
{
return new AddCompute();
}
}
public class JianFaFactory : Factory
{
public override Compute GetCompute()
{
return new SubCompute();
}
}
public class ChengFaFactory : Factory
{
public override Compute GetCompute()
{
return new ChengFaCompute();
}
}
public class ChuFaFactory : Factory
{
public override Compute GetCompute()
{
return new ChuFaCompute();
}
} /// <summary>
/// 计算类
/// </summary>
public abstract class Compute
{
protected int number1; public int Number1
{
get { return number1; }
set { number1 = value; }
}
protected int number2; public int Number2
{
get { return number2; }
set { number2 = value; }
} public abstract int GetResult(); } /// <summary>
/// 加法
/// </summary>
public class AddCompute : Compute
{
public override int GetResult()
{
return number1 + number2;
}
}
/// <summary>
/// 减法
/// </summary>
public class SubCompute : Compute
{
public override int GetResult()
{
return number1 - number2;
}
}
/// <summary>
/// 乘法
/// </summary>
public class ChengFaCompute : Compute
{
public override int GetResult()
{
return number1 * number2;
}
} /// <summary>
/// 除法
/// </summary>
public class ChuFaCompute : Compute
{
public override int GetResult()
{
return number1 / number2;
}
}
static void Main(string[] args)
{
int number1 = ;
int number2 = ; Factory factory = null;
string operate = "+";
switch (operate)
{
case "+":
factory = new AddFactory();
break;
case "-":
factory = new JianFaFactory();
break;
case "*":
factory = new ChengFaFactory();
break;
case "/":
factory = new ChuFaFactory();
break;
default:
break;
}
Compute compute = factory.GetCompute(); compute.Number1 = number1;
compute.Number2 = number2;
Console.WriteLine(compute.GetResult());
Console.ReadKey();
}
3.和简单工厂不同的地方是
(1)简单工厂是由switch直接创建具体的产品对象,而工厂方法是swith延迟创建具体的产品对象,先创建相应的工厂,在延迟创建具体的产品对象
(2)简单工厂只能创建一个工厂,工厂方法可以创建多个工厂
4.工厂方法的好处:
(1)用工厂方法在一个类的内部创建对象通常比直接创建对象更灵活。
(2)Factory Method模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。
3.Factory Method 工厂方法模式(创建型模式)的更多相关文章
- 设计模式C++学习笔记之五(Factory Method工厂方法模式)
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的 ...
- Factory Method 工厂方法模式
Factory method工厂方法模式是一种实现了“工厂”概念的面向对象设计模式.就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题.工厂方法模式的实质是“定义一个创建对象 ...
- FactoryMethod工厂方法模式(创建型模式)
1.工厂方法模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只 ...
- Prototype原型模式(创建型模式)
1.原型模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只有一 ...
- Factory Method(工厂方法)-对象创建型模式
1.意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 2.动机 框架使用抽象类定义和维护对象之间的关系.这些对象的创建通常也由框架 ...
- 工厂方法模式——创建型模式02
1. 简单工厂模式 在介绍工厂方法模式之前,先介绍一下简单工厂模式.虽然简单工厂模式不属于GoF 23种设计模式,但通常将它作为学习其他工厂模式的入门,并且在实际开发中使用的也较为频繁. (1 ...
- Factory Method工厂方法模式
定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类,属于创建型模式 在此模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生产 ...
- 设计模式(三): FACTORY工厂模式 -- 创建型模式
1.定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类. 2.适用场景 1.第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体 ...
- 设计模式(五):PROTOTYPE原型模式 -- 创建型模式
1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.适用场景 原型模式的主要思想是基于现有的对象克隆一个新的对象出来,一般是有对象的内部提供克隆的方法,通过该方法返回一个对 ...
随机推荐
- easyui datagrid 编辑器绑定事件
依照网上的和自己想的,在获取编辑器后直接绑定事件,思路没有问题,但是总是不响应 细细浏览网上的资料,无意中看到editor 的type 类型和自己写的不一致,自己写的是textbox,而网上的是val ...
- C/C+小记
1.struct与typedef struct struct Student{int a;int b}stu1; //定义名为Student的结构体,及一个Student变量stu1 struct { ...
- chrome 插件开发
写在开头: 相当有意思的UI界面,编码实现,浏览速度.对于一天浏览器使用超过10个小时的人来说,能够定制自己的浏览器,是相当的具有诱惑力. Getting Started 1:目前不支持标准发布版本的 ...
- Random.nextint() 和Math.random()的区别
Random.nextint() 和Math.random()的区别 Java代码 Random rand = new Random(); long startTime = System.nano ...
- AndroidStudio-引用jar包及so文件
一.引用jar文件 1.将jar文件复制.粘贴到app的libs目录中: 2.右键点击jar文件,并点击弹出菜单中的"Add As Library",将jar文件作为类 ...
- You should blog even if you have no readers
Spencer Fry wrote a great post on "Why entrepreneurs should write." I would further add th ...
- DEDECMS 后台登录空白怎么办 后台无法登陆
刚安装完dedecms,兴致冲冲的准备进后台,输入完用户名和密码后,页面 中显示一片空白. 立马到网上搜搜,发现大家各抒己见,但是都没有解决问题. 不过,下面的这个方法是可以的.马上记录下来,以备其他 ...
- HDOJ 4731 Minimum palindrome
Minimum palindrome Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- __set(),__get() 魔术方法示例
<?php class Ren{private $name;private $age;private $sex;function __set($name,$value){ if($name == ...
- Win 7 下制作 mac 系统启动U盘
Win 7 下制作 mac 系统启动U盘 前几天因为工作需要,在mac 上安装了win7.后来因为习惯问题将win7 分区了,后来就是进不去mac os,只能进入win7 .可恶. 苹果客服说只能用m ...