工厂模式之一 - 简单工厂(Simple Factory)

简介: 简单工厂(Simple Factory)模式又可以叫做:静态工厂方法(Static Factory Method),它是类的创建模式。  场景:画图程序,画圆,矩形,三角,等等。 方案:需要客户端由一个指定的工厂方法来创建各种画图类。

简单工厂(Simple Factory)模式又可以叫做:静态工厂方法(Static Factory Method),它是类的创建模式。

 场景:画图程序,画圆,矩形,三角,等等。

方案:需要客户端由一个指定的工厂方法来创建各种画图类。客户端不需要知道各个画图类的名称,

         只需要给工厂方法传入画图类的参数,如:circle, square, triangle, etc,这些参数是固定的。

         如果画图类改变,甚至类名改变,我们只需要改变工厂方法即可。客户端可以保持不变。

         因为,在实际应用中,客户端可能会有成百上千,如果客户端知道的具体细节越多,改动就越大。

 

首先,我们可以定义一个画图的接口,如下:

namespace  designpattern.cs.SimpleFactory
{
    
public   interface  IShape
    {
        
void  draw();
        
void  erase();
    }
}

 

第二步,我们可以建立各个画图类,如下:

 a) 圆

 

using  System;

namespace  designpattern.cs.SimpleFactory
{
    
public   class  Circle:IShape
    {
        
public   void  draw()
        {
            Console.WriteLine(
" Draw Circle   " );
        }

        
public   void  erase()
        {
            Console.WriteLine(
" Erase Circle   " );
        }
    }
}

 

b) 矩形

 

using  System;

namespace  designpattern.cs.SimpleFactory
{
    
public   class  Rectangle : IShape
    {
        
public   void  draw()
        {
            Console.WriteLine(
" Draw Rectangle   " );
        }

        
public   void  erase()
        {
            Console.WriteLine(
" Erase Rectangle   " );
        }
    }
}

 

c) 三角

using  System;

namespace  designpattern.cs.SimpleFactory
{
    
public   class  Triangle : IShape
    {
        
public   void  draw()
        {
            Console.WriteLine(
" Draw Triangle   " );
        }

        
public   void  erase()
        {
            Console.WriteLine(
" Erase Triangle   " );
        }
    }
}

 

我们要考虑到一种情况就是,当客户端输入一个无效的图形参数的时候,

因此,我们要准备一个未知图形类,如下:

using  System;

namespace  designpattern.cs.SimpleFactory
{
    
public   class  UnknownShape : IShape
    {
        
public   void  draw()
        {
            Console.WriteLine(
" Draw Unknown Shape   " );
        }

        
public   void  erase()
        {
            Console.WriteLine(
" Erase Unknown Shape   " );
        }
    }
}

 

接下来,我们便可以构造我们的工厂类了,如下:

using  System;

namespace  designpattern.cs.SimpleFactory
{
    
public   class  ShapeFactory
    {
        
public   static  IShape Create( string  shape)
        {
            
            
switch  (shape.ToUpper())
            {
                
case   " CIRCLE " :
                    
return   new  Circle();
                
case   " RECTANGLE " :
                    
return   new  Rectangle();
                
case   " TRIANGLE " :
                    
return   new  Triangle();
                
default :
                    
return   new  UnknownShape();
            }
            
        }
    }
}

 

最后,我们可以构造一个客户端来试试,如下:

 

using  System;

namespace  designpattern.cs.SimpleFactory
{
    
public   class  ClientDemo1
    {
        
static   void  Main( string [] args)
        {
            IShape shape;
            
            
// draw circle
            shape  =  ShapeFactory.Create( " circle " );
            shape.draw();
            shape.erase();

            
// draw rectangle
            shape  =  ShapeFactory.Create( " rectangle " );
            shape.draw();
            shape.erase();

            
// draw unknown
            shape  =  ShapeFactory.Create( " diamond " );
            shape.draw();
            shape.erase();

            Console.ReadLine();
        }
    }
}

 

输出结果:

draw circle ...

erase circle ...

draw rectangle ...

erase rectangle ...

draw Unknown Shape ...

erase Unknown Shape ...

 

 

目录
相关文章
|
21天前
|
设计模式
设计模式(二)工厂方法模式(Factory Method)
设计模式(二)工厂方法模式(Factory Method)
15 0
|
设计模式 PHP
php设计模式-简单工厂模式 (Simple Factory)
简单工厂模式又称为静态工厂方法模型,它属于类创建型模式,简单工厂并不属于23种设计模式,刚开始学习设计模式的同学,对简单工厂模式、工厂方法、抽象工厂中的工厂一知半解,其实白话点来说:这些模式一定会有一个工厂类,子类并不需要知道工厂细节,只需新建工厂创建产品即好。
101 0
|
设计模式
《一天一个设计模式》----工厂方法模式(Factory Method)
《一天一个设计模式》----工厂方法模式(Factory Method)
78 0
《一天一个设计模式》----工厂方法模式(Factory Method)
|
设计模式 Java Spring
工厂模式(Factory)
工厂模式是创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,创建对象不会对客户端暴露创建逻辑,隐藏创建对象的详情,从而实现客户端与具体实现的解耦。工厂模式设计时需求注意的点: 工厂类提供公共的方法来创建对象,无论静态,而不是客户端直接创建 方法的参数可选,但参数只用来决定哪种实现,不应该存在业务参数 方法的返回一般是被创建的接口对象,也可以是抽象类或具体类 常见的工厂模式有工厂方法模式、简单工厂模式和抽象工厂模式等,并不要拘泥于哪种,在实际业务中根据需求设计。
183 0
工厂模式(Factory)
|
Windows 设计模式
设计模式四: 抽象工厂(Abstract Factory)
简介 抽象工厂模式是创建型模式的一种, 与工厂方法不同的是抽象工厂针对的是生产一组相关的产品, 即一个产品族. 抽象工厂使用工厂方法模式来生产单一产品, 单一产品的具体实现分别属于不同的产品族. 抽象工厂即是对产品族的抽象.
1863 0
|
设计模式
设计模式二: 工厂方法(Factory Method)
简介 工厂方法模式是创建型模式的一种, 核心结构有四个角色: 抽象工厂,具体工厂,抽象产品,具体产品; 实现层面上,该模式定义一个创建产品的接口,将实际创建工作推迟到具体工厂类实现, 一个产品对应一个工厂, 这样的好处是当有新产品引入时可以不修改具体的工厂角色. 意图 定义了一个创建对象的接口,但由子类决定要实例化哪个类。
851 0
|
设计模式
工厂模式(Factory)
1、简单工厂 2、工厂方法 3、抽象工厂 简单工厂和工厂方法这俩个设计模式不做详细介绍,请各位看官自行百度,有大量的解释。再次我简单引用一下其他博客主对这三种模式的理解。
994 0
|
Java 设计模式
设计模式——1工厂方法模式(Factory Method)
工厂方法模式(Factory Method)
1357 0