工厂模式之一 - 简单工厂(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 ...

 

 

目录
相关文章
|
云安全 人工智能 Cloud Native
科技向“实”万物生长,2023年云计算五大技术趋势展望
云计算也即将开启下一个十年的全新篇章
5021 0
科技向“实”万物生长,2023年云计算五大技术趋势展望
|
10月前
|
安全 数据处理 索引
深入探讨 Python 列表与元组:操作技巧、性能特性与适用场景
Python 列表和元组是两种强大且常用的数据结构,各自具有独特的特性和适用场景。通过对它们的深入理解和熟练应用,可以显著提高编程效率和代码质量。无论是在数据处理、函数参数传递还是多线程环境中,合理选择和使用列表与元组都能够使得代码更加简洁、高效和安全。
254 9
|
人工智能
AI假图检测:Deepfake层出不穷,怎么才能“有图有真相”?
【9月更文挑战第11天】随着AI技术的进步,DeepFake等换脸、P图技术让图片真假难辨。本内容介绍AI假图检测方法,包括观察细节、检查一致性、利用AI工具和借助AI技术构建训练数据集等。AI假图检测具有挑战性,需综合多种方法和技术进行分析。
930 2
|
自然语言处理 API Android开发
阿里Qwen2-72B大模型已是开源榜的王者,为什么还要推出其他参数模型,被其他模型打榜?
阿里云的Qwen2-72B模型在Hugging Face上荣登开源模型榜首,展现卓越性能,超越其他包括Meta的Llama-3在内的竞争者。Qwen2有多个参数版本,其中72B版本在自然语言理解、知识、代码等任务上表现出色。较小参数版本如7B模型在某些方面略逊一筹。推出不同参数模型可能是为了降低成本、加速迭代、构建丰富的模型生态。通过提供不同规模的模型,阿里云旨在促进技术研究和全场景应用,类似于微软Windows XP和阿里云OS生态的构建策略。
736 1
|
人工智能 自然语言处理 机器人
字节打造大模型TTS:不仅能高保真合成,而且支持调整编辑
【6月更文挑战第26天】字节跳动的Seed-TTS是先进的文本转语音系统,生成与人类语音难辨别的声音,并允许编辑。模型通过语音、文本编码器、解码器和声码器实现高保真、可控及多样化的语音生成。应用于智能客服、有声读物、导航,提升用户体验。虽在多模态任务、长文本生成、实时应用及隐私问题上面临挑战[[arxiv.org/pdf/2406.02430](https://arxiv.org/pdf/2406.02430)]。
511 7
|
负载均衡 监控 前端开发
|
存储 云计算 数据安全/隐私保护
大模型时代,云计算的两条路径
【1月更文挑战第12天】大模型时代,云计算的两条路径
473 2
大模型时代,云计算的两条路径
|
JavaScript Java 测试技术
基于springboot+vue.js的农产品直卖平台附带文章和源代码设计说明文档ppt
基于springboot+vue.js的农产品直卖平台附带文章和源代码设计说明文档ppt
190 0
|
存储 关系型数据库 MySQL
MySQL必看表设计经验汇总-上(精华版)
MySQL必看表设计经验汇总-上(精华版)
507 1
|
安全 Java C++
Java 2023 常见20道基础面试题
当准备 Java 基础面试时,了解常见的面试题并掌握它们的答案是非常重要的。下面是20道常见的 Java 基础面试题以及它们的答案:
633 0