C#设计模式——简单工厂模式

参考资料:
深入理解设计模式(二):简单工厂模式
C#设计模式(2)——简单工厂模式

1. 什么是简单工厂模式
 简单工厂模式又称为静态工厂模式。实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有的创建对象都是充当这个角色的某个具体类的实例。
其实就是将一个具体类的实体化交给一个静态工厂方法来执行。它不属于GOF的3种设计模,但却经常被使用

2. 简单工厂模式的结构

  • 工厂角色:它负责实现创建所有具体产品类的实现。工厂类可以被外界直接调用,创建所需的产品对象
  • 抽象产品的角色:是所有具体产品的父类,它负责描述所有实例所共有的公共接口
  • 具体产品角色:继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。工厂类返回的都是该角色的某一具体产品。

3.简单工厂模式的应用场景

  • 创建的对象少,不会造成工厂方法中的业务逻辑太过复杂
  • 客户端只需传入工厂方法参数,无需知道对象如何创建

4. 简单工厂模式的优缺点

优点:
简单工厂模式解决了客户端直接依赖于具体对象的问题,客户端可以消除直接创建对象的责任,而仅仅是消费产品。该模式实现了对责任的分割

缺点:
职责过重,一但程序出错,整个系统都不能运行
它所能创建的类只能是事先考虑好的,如果需要添加新类,就需要改变工厂类
由于工厂类集中了所有实例的创建逻辑,违反了开闭原则,将全部创建逻辑集中到了一个工厂类中
由于使用了静态工厂的方法,造成工厂角色无法形成基于继承的等级结构

5. 简单工厂模式的实现

public  class ApplePhonFactory   
{
        public static ApplePhone CreatePhone(string model)
        {
            ApplePhone ap = null;
            switch (model)
            {
                case "IPhoneX":
                    ap = new IPhoneX();
                    break;
                case "IPhoneXS":
                    ap = new IPhoneXS();
                    break;
                case "IPhoneXR":
                    ap = new IPhoneXR();
                    break;
                default: 
                    break;
            }
            return ap;
        }   
}   
public abstract class ApplePhone   
{
        public abstract void GetSize();   
}
   
public class IPhoneX : ApplePhone  
{
        public override void GetSize()
        {
            Console.WriteLine("IPhoneX");
        }   
}   
public class IPhoneXS : ApplePhone   
{
        public override void GetSize()
        {
            Console.WriteLine("IPhoneXS");
        }   
}
   
public class IPhoneXR : ApplePhone   
{
        public override void GetSize()
        {
            Console.WriteLine("IPhoneXR");
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值