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.适用场景 原型模式的主要思想是基于现有的对象克隆一个新的对象出来,一般是有对象的内部提供克隆的方法,通过该方法返回一个对 ...
随机推荐
- tmux下的滚屏
先Ctrl+b进入tmux的操作模式,然后用PageUp和PageDown,
- PHP中应用GD2函数在图像上添加文字
<?php header("Content-type:text/html;charset=utf-8"); header("Content-type:image/g ...
- 添加一个txt文件(例如在桌面),利用后台对文件写入内容
string str = "今天天气好晴朗,处处好风光."; //需要将字符串转化成字节数组 byte[] buffer = Encoding.Default.GetBytes(s ...
- js中改变不同的div属性值的操作
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- mongo操作
详细使用网址:http://blog.csdn.net/xinghebuluo/article/details/7050811 MongoDB基本使用 成功启动MongoDB后,再打开一个命令行窗口输 ...
- 使用.NET FrameWork获取CPU,内存使用率以及磁盘空间
在以前,我们想获取CPU,内存等信息就不得不借助win32 API来实现.但现在,.NET FrameWork已经把这些API封装到.NET类库中了,所以我们可以借助.NET类库很轻松的获取这些信息. ...
- Protocol Buffer技术详解(数据编码)
Protocol Buffer技术详解(数据编码) 之前已经发了三篇有关Protocol Buffer的技术博客,其中第一篇介绍了Protocol Buffer的语言规范,而后两篇则分别基于C++和J ...
- include(thinkphp常用内置标签)
变量输出使用普通标签就足够了,但是要完成其他的控制.循环和判断功能,就需要借助模板引擎的标签库功能了,系统内置标签库的所有标签无需引入标签库即可直接使用. XML标签有两种,包括闭合标签和开放标签,一 ...
- js中window的属性
Window的属性 属性描述 closed 获取引用窗口是否已关闭. defaultStatus 设置或获取要在窗口底部的状态栏上显示的缺省信息. dialogArguments 设置或获取传递给模式 ...
- virtualbox 不能为虚拟电脑打开一个新任务/VT-x features locked or unavailable in MSR.
确保了主机的BIOS中开启了Intel Virtual Technology,虚拟机配置中勾选了“启用VT-x/AMD-V”. 这是因为CPU不支持VT-X技术或者VT-X技术被锁定. 如果不打开虚拟 ...