欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式之简单工厂模式(C#语言描述)

程序员文章站 2022-05-13 22:39:17
严格意义上来说,简单工厂模式并不属于GoF的23种设计模式,但是它是学习其他工厂模式的基础和前提条件。理解了简单工厂模式,学习工厂方法模式和抽象工厂模式会比较容易一些。 简单工厂模式的定义 定义一个工厂类,他可以根据不同的参数返回不同类的实例。通常情况下,被创建的类的实例通常都具有共同的父类。 简单 ......

严格意义上来说,简单工厂模式并不属于gof的23种设计模式,但是它是学习其他工厂模式的基础和前提条件。理解了简单工厂模式,学习工厂方法模式和抽象工厂模式会比较容易一些。

简单工厂模式的定义

定义一个工厂类,他可以根据不同的参数返回不同类的实例。通常情况下,被创建的类的实例通常都具有共同的父类。

简单工厂模式又可以称之为静态工厂方法模式,因为创建对象实例的方法通常都是静态方法。

在简单工厂模式中,只需要记住一点。一个简单的参数可以即可获得所需的对象实例。

简单工厂模式的uml图如下:

设计模式之简单工厂模式(C#语言描述)

  简单工厂模式包含三个角色:

   1、工厂角色(factory)该类是简单工厂的核心,我们所需要的对象实例就是这个类帮我们创建的,它里面有一个静态方法getproduct(string producttype),我们通过传入产品类型(producttype)来得到我们想要的产品。

   2、抽象产品角色(abstractproduct):该类是所有产品的父类。它可以是接口或者抽象类。只有这样我们才能给工厂的getproduct(string producttype)方法定义返回值。

   3、实体产品(concreteproducta,concreteproductb,concreteproductc):这些类是简单工厂最终要创建的目标,也是客户端最终想要的对象实例。

现在来假设一种场景,我们开发过程中,肯定会用到按钮,圆形按钮、正方形按钮、矩形按钮等等,在程序的很多地方我们都可能会复用这些按钮。我们可以通过一个简单工厂来帮助我们创建这些按钮。

首先我们要声明工厂要生产的产品(各种按钮)类

    public class button
    {
        public virtual void onclick()
        {

        }
    }
    public class roungbutton:button
    {
        public override void onclick()
        {
            console.writeline("点击了圆形按钮!");
        }
    }
    public class squarebutton:button
    {
        public override void onclick()
        {
            console.writeline("点击了正方形按钮!");
        }
    }
    public class rectanglebutton:button
    {
        public override void onclick()
        {
            console.writeline("点击了矩形按钮!");
        }
    }

其次是我们的(静态工厂类)

public class buttonfactory
    {
        public static button createbutton(string type)
        {
            button btnobj = null;
            switch (type)
            {
                case "round":
                    btnobj = new roungbutton();
                    break;
                case "square":
                    btnobj = new squarebutton();
                    break;
                case "rect":
                    btnobj = new rectanglebutton();
                    break;
            }
            return btnobj;
        }
    }

在此处还有一些要说明的要点。

简单工厂类帮助我们创建的是一类产品,这一类产品有一个共同的父类,这个父类是作为工厂方法的返回值来使用的。如果没有这个共同的父类,我们的程序就需要用object作为返回值,然后在程序中进行强制转换,这个明显是非常不友好的编程。而作为一名程序员,在程序中进行大量的装箱和拆箱操作是比较耗费性能的,良好的编程习惯中,也应该尽量减少装箱拆箱的操作。

然后我们就可以在控制台调试我们的程序了

        static void main(string[] args)//文件名的修改
        {
            button roundbtn = buttonfactory.createbutton("round");
            roundbtn.onclick();
            button squarebtn = buttonfactory.createbutton("square");
            squarebtn.onclick();
        }

程序的运行结果如下图:


设计模式之简单工厂模式(C#语言描述)

最后给大家介绍一个和技术相关的付费问答平台、阅读平台-技易  欢迎访问:

欢迎关注官方微信号:

 

设计模式之简单工厂模式(C#语言描述)