前言

  工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

  简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择动态实例化相关类,对于客户端来说,去除了与具体产品的依赖。例如:计算器,只需要把“+”、“-”等给客户端,然后传入工厂,工厂就自动给出了相应的实例,但问题就这里,如果添加一个“*”的功能,我们一定要给工厂类的方法加‘case’判断的,修改原有的类?这就违背了开-闭原则。

1、公共类

  

     /// <summary>
/// 这个人会挣钱,会开公司,男人,女人都要学习
/// </summary>
public class MaYun
{
public void Money()
{
Console.WriteLine("挣钱");
}
public void Company()
{
Console.WriteLine("开公司"); }
}
     public class Man : MaYun
{ }
public class Woman : MaYun
{ }

二、简单工厂

  工厂类:

  public class SimpleFactory
{
public static MaYun CreateMaYun(string type)
{
MaYun m = null;
switch (type)
{
case "Man":
m = new Man();
break;
case "Woman":
m = new Woman();
break;
default:
break; }
return m;
}
}

  客户端:

     class Program
{
static void Main(string[] args)
{
#region 简单工厂
MaYun man1 = SimpleFactory.CreateMaYun("Man");
man1.Money();
man1.Company();
MaYun woman1 = SimpleFactory.CreateMaYun("Woman");
woman1.Money();
woman1.Company();
#endregion
}
}

三、工厂

  定义工厂接口,并让男人的工厂和女人的工厂类继承该接口

  public interface  IFactory
{
MaYun CreateMaYun();
}
public class ManFactory : IFactory
{
public MaYun CreateMaYun()
{
return new Man();
}
}
public class WomanFactory : IFactory
{
public MaYun CreateMaYun()
{
return new Woman();
}
}

  客户端:

     class Program
{
static void Main(string[] args)
{ #region 工厂
//要修改为woman,只需修改 IFactory factory = new WoManFactory();
IFactory factory = new ManFactory();
MaYun mm = factory.CreateMaYun();
mm.Company();
mm.Money();
#endregion
}
}

总结:

  1、尽管如果换成‘woman类’或者其他子类,还是要修改代码的,但只需要修改一处就可以了。

  2、工厂模式克服了简单工厂违背开-闭原则的缺点,又保持了封装对象创建过程的优点。

  参考书籍:大话设计模式

工厂模式vs简单工厂的更多相关文章

  1. Java学习笔记——Java工厂模式之简单工厂

    package com.app; import java.util.Date; /* * 工厂模式:简单工厂.工厂方法.抽象工厂 * * */ public class Test0718_Factor ...

  2. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  3. Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---工厂模式之简单工厂

    简单工厂:工厂依据传进的参数创建相应的产品. http://www.cnblogs.com/DelphiDesignPatterns/archive/2009/07/24/1530536.html { ...

  4. Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

  5. 【LabVIEW技巧】工厂模式_简单工厂

    前言 上一个文章介绍了如何学习LabVIEW OOP,简要的提及了一些OOP学习中注意的事项,许多文章的读者反映写的太范,后文会逐步缩小范围,讨论在LabVIEW中各个模式的应用. 工厂模式概述 工厂 ...

  6. 设计模式之工厂模式之简单工厂(php实现)

    github源码地址: git@github.com:ZQCard/design_pattern.git 1.简单工厂模式 特点:将调用者与创建者分离,调用者直接向工厂请求,减少代码的耦合.提高系统的 ...

  7. Objective-C 工厂模式(上) -- 简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂 ...

  8. factory工厂模式之简单工厂SimpleFactory

    简单工厂(Simple Factory) 又叫静态工厂,是工厂模式三中状态中结构最为简单的.1.主要有一个静态方法,用来接受参数,并根据参数来决定返回实现同一接口的不同类的实例.2.或者针对每个产品, ...

  9. c# 设计模式 之:工厂模式之---简单工厂

    1.uml类图如下: 具体实现和依赖关系: 实现:SportCar.JeepCar.HatchbackCar 实现 Icar接口 依赖: Factory依赖 SportCar.JeepCar.Hatc ...

  10. JAVA 工厂模式:简单工厂

    简单工厂模式(SimpleFactory Pattern): 又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的 ...

随机推荐

  1. java httpclient basic授权

    import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpS ...

  2. JSZip

    /*! JSZip - A Javascript class for generating and reading zip files<http://stuartk.com/jszip> ...

  3. Tree命令安装和使用

    Tree命令简介 tree是一种递归目录列表命令,产生一个深度缩进列表文件,这是彩色的ALA dircolors如果ls_colors设置环境变量和输出是TTY.树已经被移植和报道以下操作系统下工作: ...

  4. keepalived的配置文件

    ! Configuration File for keepalived global_defs { notification_email { # acassen@firewall.loc # fail ...

  5. RAS

    Reliability 高可靠性 Availability 高可用性 Serviceability 高服务性

  6. CreateProcessAsUser 服务调用

    CreateProcessAsUser 函数 如果想通过服务向桌面用户Session 创建一个复杂UI 程序界面,则需要使用CreateProcessAsUser 函数为用户创建一个新进程用来运行相应 ...

  7. 去掉Tomcat网站地址栏的小猫图标

    当我们打开CSDN等网站时,在地址栏前面就会出现红色的C状图标,如果在桌面新建此链接的快捷方式,则桌面图标也自动变为该地址栏ICO图标.在基于TOMCAT的BS应用或网站开发时,默认的图标为黄色的小猫 ...

  8. jmeter性能工具 之监控cpu,内存等信息(四)

    1.jmeter 本身不支持直接监控 cpu,内存等信息,需要去官网下载控件 JMeterPlugins-Standard-1.4.0.zip    解压好将其中\lib\ext\JMeterPlug ...

  9. ELK Stack

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11488404.html ELK workflow log -> filebeat -> l ...

  10. [HYSBZ - 3252] 攻略

    问题描述 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX 半岛>,这款游戏有n个场景(scene),某 ...