设计模式(3)----- 简单工厂模式

简单工厂(SimpleFactory)

  • 概念:
    • 为什么工厂模式是如此常用?
    • 解决方案【步骤】
      • 实现类图
      • 示例:

概念:

关键字:【多选一】

问题:客户在使用对象时,面临在多个类型中选择一个类创建对象,具体对象的类型可能有变化。

意图:定义一个全局的工厂类,负责类型的选择及对象的创建初始化,从而实现将创建与表示分离。

适用性:
当一个类不知道它所必须创建的对象的类的时候,当类将创建对象的职责委托给一个全局创建点,客户不需要关心具体类型,需要对象的时候,找全局创建点即可。工厂可以根据需要动态创建不同的对象的接口类或方法,这些对象往往有共同的父接口或父类,工厂模式是我们最常用的模式,在大部分程序系统中都在大量运用。

为什么工厂模式是如此常用?

因为工厂模式就相当于创建实例对象的new

1.我们经常要根据类生成实例对象
2.工厂模式也是用来创建实例对象的
使用工厂模式,可能多做一些工作,但会给系统带来更大的复用性和可维护性

工厂模式:
1》工厂方法(Factory Method)
2》抽象工厂(Abstract Factory)

这两个模式:

1.共性:是对象的创建与使用进行了分离
2.不同:

  • 工厂方法:一次只能创建一个对象

  • 抽象工厂:一次创建一系列相互依赖的对象

工厂方法设计模式
问题【需求,功能】
当需要根据不同的条件产生不同的对象时,
当然这些不同的对象类型不同,却具有共同的父类

解决方案【步骤】

1)创建父类产品以及所有的子类产品
2)创建一个工厂类,在工厂类中定义一个方法即工厂方法
3)实现工厂方法,即根据不同的条件创建并返回不同的对象

优点:

  • 工厂依赖于所有的子类产品,工厂是整个模式的核心,以不变应万变
  • 工厂方法把创建对象的具体过程封装了,客户只需知道父类产品和工厂即可.

它使对象的创建与使用进行了分离:

  1. 简化了客户端的应用,也改善了程序的扩展性,
  2. 使得将来可以做最小的改动就可以加入新的待创建的类.

实现类图

设计模式(3)----- 简单工厂模式_第1张图片

本例以中文命名类名,方法名,是为了便于学习理解,实际工作并不建议编程以中文命名。

示例:

先创建一个接口类型

public interface{
     
    void 吃到了();
}

创建枚举类型

public enum 饭的类型
{
     
    米饭,
    火锅,
    面条,
}

再创建接口里的实现类

using System;

public class 火锅 :{
     
    public void 吃到了()
    {
     
        Console.WriteLine("吃到了火锅!");
    }
}
using System;

public class 米饭 :{
     
    public void 吃到了()
    {
     
        Console.WriteLine("吃到了米饭!");
    }
}
using System;

public class 面条 :{
     
    public void 吃到了()
    {
     
        Console.WriteLine("吃到了面条!");
    }
}

创建一个工厂,生成基于给定信息的实体类的对象。

public class 饭店Factory
{
     
    public 饭 吃什么(饭的类型 eat)
    {
     
        switch (eat)
        {
     
            case 饭的类型.火锅:
                return new 火锅();
            case 饭的类型.面条:
                return new 面条();
            case 饭的类型.米饭:
                return new 米饭();
        }
        return null;
    }
}

测试示例

using System;

class Program
{
     
    static void Main(string[] args)
    {
     
        饭店Factory 饭店 = new 饭店Factory();
        饭店.吃什么(饭的类型.火锅).吃到了();
        饭店.吃什么(饭的类型.面条).吃到了();

        Console.Read();
    }
}

输出示例图
在这里插入图片描述

你可能感兴趣的:(设计模式(Design,pattern),设计模式,c#)