恋爱中的设计模式 之 Simple Factory模式 (简单工厂模式).doc
来源:互联网 发布:日语 推荐信 知乎 编辑:程序博客网 时间:2024/05/21 04:40
恋爱中的设计模式 之
简单工厂模式
----Simple Factory Pattern
Simple Factory模式的核心特点:
为创建对象提供接口,将创建对象的具体过程屏蔽起来。
恋爱中的Simple Factory模式:
――追MM么,少不了请MM吃饭,高档饭馆去不起,KFC,McDonald之类的快餐店自然是上上之选
MM:“今天我要去KFC吃饭。”
――到达KFC
MM:“我要4个鸡翅”
GG:“好的。服务员,给我来4个鸡翅”
--不几日,MM又光临Mcdonald,类似事件再次上演。
“案情”分析:
无论去KFC还是Mcdonald,MM只要跟你说“来4个鸡翅”就行了,不用说“来4个KFC的鸡翅”或“来4个Mcdonald的鸡翅”,身为GG的你自然会根据所处的地点购买到相应的鸡翅。
由此不难看出,Simple Factory模式将客户类(MM)和产品类(鸡翅)分隔开来,当客户类需要某种产品时,只须跟工厂类(苦力GG)请求即可。
Simple Factory模式的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。它往往由一个具体类实现。 例子中的GG就属于工厂类角色
2) 抽象产品角色:它是实际产品的抽象,提供统一的接口和方法以供实际产品去各自实现。它往往由接口或者抽象类来实现。 例子中并没有直接出现,不过对KFC和Mcdonald抽象,可以得到“快餐店”这个接口,它就是抽象产品类
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。它往往由一个具体类实现。 例子中的KFC和Mcdonald就是该角色
Simple Factory模式的优缺点:
优点:从直接创建变成“消费”,让客户更“傻瓜”。
满足DIP(依赖倒转原则,Dependence Inversion Principle,要针对接口编程,不要针对实现编程,即高层类对底层类开放接口,而不是开放实现)。
满足LOD(迪米特法则,Law of Demeter,只与你直接的朋友通信,而避免和陌生人通信,MM只跟GG通信,而不去跟快餐店店员通信)
消费者无须任何变动就可消费新产品。如:如果你们到了振鼎鸡,那么MM也只要说“4个鸡翅”即可,MM不用作任何变动
缺点:不满组OCP(开放-关闭原则,Open-Closed Principle,对扩展开放,对修改关闭)。
当产品发生变动时,工厂类(GG)也要做相应的修改。如:如果增加一个新的产品(比如振鼎鸡),工厂类就要作相应的修改;如果MM准备尝试新产品(比如汉堡),工厂类也需要作相应的修改。
Simple Factory模式的使用:
顾名思义,Simple Factory模式是一种很简单的模式,它其实是Factory Method模式的一种特殊情况。当用户需要使用某个对象(吃鸡翅),但好几个类都可以生成这种对象(KFC,Mcdonald都卖鸡翅),用户不想去考虑该实例化哪个类的时候,就可以考虑使用这种方法。
使用了Simple Factory的一个明显的好处就是:用户不需要去实例化对象,只要“消费”对象就可以了。
如何去实现Simple Factory模式呢?可以分以下几个步骤:
1) 分清角色:客户,产品,工厂(MM是客户,GG是工厂,KFC和Mcdonald是产品);
2) 对产品抽象,创建抽象产品接口(“快餐店”);
3) 实现具体产品(“KFC”类和“Mcdonald”类);
4) 实现工厂类,该类是整个环节的核心,通过工厂类,可以获得具体产品类的实例,这个函数应该被声明为静态函数
5) 其他操作:客户类,客户消费动作等等。
例示代码:
编程环境:Visual Studio 2005
运行方法:通过VS05新建C#的Console Application,将下面的代码全部拷贝,覆盖Program.cs中的代码,然后即可运行。
/*
* 1、SIMPLE FACTORY:追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,
* 虽然口味有所不同,但不管去麦当劳或肯德基,MM只要跟你说“我要个鸡翅”就可以了,
* 如果在KFC,你肯定不会买来MCDONALD的鸡翅,反之亦然。
*/
using System;
using System.Collections.Generic;
using System.Text;
namespace Simple_Factory
{
/// <summary>
/// 产品接口
/// </summary>
interface IFastFood
{
void SellChickenWing();
}
/// <summary>
/// 实际产品
/// </summary>
class KFC : IFastFood
{
public void SellChickenWing()
{
Console.WriteLine("欢迎光临KFC!这是您点的个鸡翅.请慢慢享用");
}
};
/// <summary>
/// 实际产品
/// </summary>
class Mcdonald : IFastFood
{
public void SellChickenWing()
{
Console.WriteLine("欢迎光临Mcdonald!这是您点的个鸡翅.请慢慢享用");
}
};
/// <summary>
/// 工厂类,苦力...
/// </summary>
class SSGG
{
public static IFastFood GoTo(string placeName)
{
switch(placeName)
{
case "KFC" :
{
return new KFC();
}
case "Mcdonald" :
{
return new Mcdonald();
}
default :
return null;
}
}
};
/// <summary>
/// 客户类
/// </summary>
class PPMM
{
static void
{
//某天,二人来到KFC吃饭,MM点了个鸡翅
IFastFood targetPlace = SSGG.GoTo("KFC");
targetPlace.SellChickenWing();
//隔天,二人来到Mcdonald吃饭,MM又点了个鸡翅
IFastFood targetPlace2 = SSGG.GoTo("Mcdonald");
targetPlace2.SellChickenWing();
}
}
}
- 恋爱中的设计模式 之 Simple Factory模式 (简单工厂模式).doc
- 【设计模式】之 Simple Factory 简单工厂
- 设计模式-简单工厂模式(Simple Factory)
- 设计模式之简单工厂模式(Simple Factory Pattern)
- 设计模式之Simple Factory(简单工厂模式)
- 设计模式之简单工厂模式(Simple Factory)
- JAVA设计模式之 简单工厂模式【Simple Factory Pattern】
- C#设计模式之简单工厂模式(Simple Factory Pattern)
- Java设计模式之简单工厂模式(Simple Factory)
- 设计模式之简单工厂模式(Simple Factory)
- 设计模式-简单工厂(Simple Factory)
- 简单工厂设计模式(Simple Factory)
- 设计模式之简单工厂——Simple Factory
- C#设计模式之工厂模式(Factory)--01 简单工厂(Simple Factory)
- 设计模式 一 简单工厂Simple Factory(工厂模式)
- 设计模式-Simple Factory 简单工厂模式(静态工厂)
- 设计模式笔记之工厂模式--简单工厂模式(Simple Factory Pattern)
- 简单工厂模式(Simple Factory)
- 租妻72小时
- XML Schema 简明教程
- 感觉c/c++应该提供bits rotate shifting的操作符
- 程序员如何防止脑疲劳
- 该跟MOTO T720说再见了
- 恋爱中的设计模式 之 Simple Factory模式 (简单工厂模式).doc
- ant远程发布
- swolf看过来
- 离互联网的终极目标,我们和国外的差距为零!
- vs2005下使用sql 2000或其他数据库作为membership的默认提供程序
- 祝我,以及远方的卡马克生日快乐
- 找含匹配列的行-T-SQL系列
- Java相关术语大全
- Web2.0只是一个匆匆过客 -- 答博友