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

概念:

关键字:【多选一】

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

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

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

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

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

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

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

这两个模式:

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

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

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

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

解决方案【步骤】

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

优点:

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

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

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

实现类图

在这里插入图片描述

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

示例:

先创建一个接口类型

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();
    }
}

输出示例图
在这里插入图片描述
设计模式------首页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值