您的位置:首页 > 其它

【创建型设计模式】-简单工厂方法设计模式

2016-06-24 10:06 471 查看
单词:Creator [kriˈetɚ] 创造者,创作者; Product [ˈprɑdʌkt] 产品; 结果; 乘积; 作品; factory [ˈfæktəri] 工厂,制造厂; <古>代理店;

简单工厂方法设计模式的设计图纸





Creator 是一个工厂类, 根据“四人帮”的软件设计模式的记号,图中的右半部分的类叫做产品类,由接口 Product 与 具体的实现类产品类ConcreteProduct 组成。

产品类实际上代表被创建的类结构,而Creator 类 是简单工厂的核心部分。Creator 类 拥有一个方法 ,factory() 及工厂方法,该方法负责创建产品类的对象。简单工厂方法模式 的特点是仅仅一个具体的创建者类,并且在此类中包含一个静态的工厂方法 factory()。

简单工厂方法模式包含的各组成部分的意义如下:

1.Creator:是简单工厂方法模式的核心,包含应用程序所需的业务逻辑,当客户类 Client 需要的时候,委托工厂类创建产品的实例。

2.Product:可以是 C# 接口,或者C# 抽象类, 是具体的子类 的超类,或者共同接口。

3.ConcreteProduct:实现 Product 接口,或者继承抽象类 Product。

例子:汽车保险管理程序实例的最后解决方案及为简单工厂方法模式, 其设计图给出,下面给出相应的代码。

namespace SimpleFactory
{
class Program
{
static void Main(string[] args)
{
//根据不同的场景实例出不同的类
IAutoInsurance ai = PolicyProducer.getPolicyObj("bodyInjure");
string desc = ai.getInsurInfo();
}
}

/// <summary>
/// 工厂类
/// </summary>
public class PolicyProducer
{
public static IAutoInsurance getPolicyObj(string option)
{
IAutoInsurance policy = null;
switch (option)
{
case "bodyInjure":
policy = new BodyInjur();
break;
case "collision":
policy = new Collision();
break;
}
return policy;
}

}

/// <summary>
/// 抽象产品
/// </summary>
public interface IAutoInsurance
{
public string getInsurInfo();

}

/// <summary>
/// 产品类1
/// </summary>
public class BodyInjur : IAutoInsurance
{
private string description;

public string getInsurInfo()
{
return "bodyInjure";
}
}

/// <summary>
/// 产品类2
/// </summary>
public class Collision : IAutoInsurance
{

public static string getInsurInfo()
{
return "collision";
}
}

}


简单工厂方法模式的有点如下:

1.工厂方法包含从一个类的结构中选择初始类的业务逻辑。

2.客户类不直接创建产品的对象,客户类只作为对象的消费者。

3.简单工厂方法模式实现了责任分离。

4.客户类不负有创建类的对象责任,因此如果有新产品子类加入,不必修改已有的客户类代码(前提是客户类暂时不需要使用新的产品子类对象。)

5.因为工厂类中包含了对象生成的必要逻辑判断,根据客户端的选择条件对台实例化相关的类,所以客户端类中没有创建对象所需要的条件语句。

简单工厂方法模式的缺点如下:

1.由于工厂类必须知道怎么创建每个子类的对象,所以每当增加产品的类时候,都需要修改工厂方法,简单工厂方法模式不符合开闭原则。

2.因为工厂类的工厂方法是讲台的,所以工厂类中的方法不能被继承,简单工厂类只能是有一个单独的类,而不能成为一个层次的类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: