工厂模式之——【简单工厂模式】剖析

简单工厂模式

简单工厂模式又叫做静态工厂模式,顾名思义,它就是用来实例化目标类的静态类即客户端不需要负责“创建”对象的职责,只要通过这个静态类来创建出对应的类的实例返回给客户端,客户端只需要负责“消费”就可以了。。。

【解决问题】:如何去实例化一个合适的对象

【核心思想】:有一个专门的类类负责创建实例的过程 并返回给实例的对象 

【角      色】

工厂类角色:担任这个角色的简单工厂模式的核心,工厂类在客户端的直接调用下 创建产品对象并返回该对象。 

抽象产品角色:担任这个角色的类是工厂类所创建的对象的父类,或者他们有共同的接口。 

具体产品角色:工厂类所创建的任何对象都是这个角色的实例 

 

下面介绍一个例子来进行讲解

首先了解下现实场景:一个人总有很多件不同类型的衣服来适应不同的场合,怎么样用程序来实现呢??

对该场景进行分析:

工厂类:根据场合,获得相应衣服--- CreateCloth()方法
抽象产品:衣服具有一些共同的特征,或者定义公共方法或者属性,放在此类中---- -abstract:GetCloth()抽象方法

具体产品:衣服 继承与接口或者抽象 同时具有自身的特点


=======================代码片段讲解=================


抽象产品类:定义了一个公共的方法GetCloth(),用来获取对应的衣服 

1  //抽象产品:获取衣服
2     public abstract class Cloth
3     {
4        public abstract void GetCloth();
5     }


具体产品类 :定义了三种具体的产品:商务装、休闲装、运动装,都继承于抽象产品类,重写了抽象产品类中的抽象方法

//具体产品1:商务装
    class 商务装 : Cloth
    {
        public override void GetCloth()
        {
            Console.WriteLine("商务装......");
        }
    }

    //具体产品2:运动装
    class 运动装 : Cloth
    {
        public override void GetCloth()
        {
            Console.WriteLine("运动装.....");
        }
    }

    //具体产品3:休闲装
    class 休闲装 : Cloth
    {
        public override void GetCloth()
        {
            Console.WriteLine("休闲装.......");
        }
    }

  工厂类( ) :根据客户端传入的参数来实例化对应类的对象 并返回该对象给客户端(这里的参数为服装类型拼音的小写首字母),定义了一个 CreateCloth() 方法 ----当然,这里的类型必须是已知的,也可以将类型放置于配置文件中来进行扩展,,便于类型的添加和修改........

//工厂类:根据客户端条件 创建并返回对象
    public class ClothFactory
    { 
        
       public static Cloth CreateCloth(string clothtype)
       {
           Cloth cloth = null;
            switch(clothtype)
            {
                case "sw":
                    cloth = new 商务装();
                    break;
                case "yd":
                    cloth = new 运动装();
                    break;
                case "xx":
                    cloth = new 休闲装();
                    break;
                default:
                    cloth = null;
                    break;
            }
客户端 :调用工厂类的静态方法,传入合适的参数获取对应对象

//客户端
        static void Main(string[] args)
        {
            //要求商务装
            Cloth cloth = ClothFactory.CreateCloth("sw");
            cloth.GetCloth();

            //要求运动装
            Cloth clothsport = ClothFactory.CreateCloth("yd");
            clothsport.GetCloth();

            Console.ReadKey();
        }

简单工厂模式小结:

优点:用户在使用时是根据工厂类去创建所需的对象实例,而无需了解是如何创建和组织这种细节问题,有利于软件体系结构的优化

缺点:1.创建和不同实例对象的操作都在一个类中完成,即不符合单一职责的原则

        2.当需要添加或者删除某个功能是会比较麻烦,需要修改工厂类,违背了开放-封闭的原则(对修改封闭,对扩展开放)

        3.工厂类中的方法为static静态方法(静态工厂方法),不能通过继承来改变创建行为

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值