博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net 设计模式之工厂模式
阅读量:4694 次
发布时间:2019-06-09

本文共 1944 字,大约阅读时间需要 6 分钟。

1.意图

定义一个创建对象的接口,让子类决定实例化那一个类,使接口类型能够延迟到子类。

结构图

工厂模式结构图

现在我们考虑一个下班回家做饭的过程。假定我们要设计煮饭的类支持煮饭的类型有稀饭和软饭两种方式,我们先不谈设计模式

public class cooking

{

  public void CookingSort()

  {

    Console.Writeline("稀饭");

  }

  public void CookingHard()

  {

    Console.Writeline("软饭");

  }

  public void DoType(string Type)

  {

    case "soft"

      CookingSort();

    break;

    case "hard"

      CookingHard();

    break;

    default:

    break;

  }

}

 

这种方式显然不适合面向对象语言程序设计要求,如果我们要增加一种类型的那么我们就得改cooking类这就使得cooking变的不稳定;

分析以上的业务关系和事情结果和过程发现两种煮饭的方式完全不同所有不应该有联系,那么我们重这里分离出两个对象来。

public class CookingSoft

{

  public void cooking_soft()

  {

    Console.WriteLine("煮饭");

  }

}

public class COOKINGHARD

{

  public void cooking_hard()

  {

    Console.writeLine("硬饭");

  }

}

 

对该设计进行进一步抽象

结构图如下

public abstract class Cooking

{
  public abstract void cook();
}

 

public class CookingSoft:Cooking

{

  public voerrid void cook()

  {

    Console.writeline("稀饭");

  }

}

 

public class CookingHard:Cooking

{

  public voerrid void cook()

  {

    Console.writeline("硬饭");

  }

}

现在我们在需要增加一种美味的大米饭需要做的事情是什么呢,只需在写一个class然后继承cooking类实现里面的方法不需要去改变原来已经写好的类

这样的设计很好的满足啦单一原则

那么我们如何去调用这段程序呢

我们经常会这样去写

CookingHard ch = new CookingHard();

ch.cook();

当我们需要做另外一种饭的时候就得改变上面这段代码这样的工作量是可想而知的

此时就需要对应用和实例类型的解耦

这就引入工厂模式

public class softFactor

{

  public CookingSoft Creat()

  {

    return new CookingSoft();

  }

}

public class hadFactor

{

  public CookingHard Creat()

  {

    return new CookingHard ();

  }

}

这两个工厂和具体的产品之间是平行的结构,并一一对应,并在它们的基础上抽象出一个公用的接口,结构图如下:

代码如下

public abstract class cookFactor

{

    public abstract Cooking Create();

}

 

public class softFactor:cookFactor

{

    public overrid  Cooking Create()

    {

      return new CookingSoft();

    }

}

public class App

 {
   public static void Main(string[] args)
   {
     cookFactor factory = new softFactor();
     Log log = factory.Create();
     log.Create();
  }
}

自此完成啦整个工厂模式的构建和代码分析过程

 

转载于:https://www.cnblogs.com/yuanxiang/archive/2012/06/04/2535469.html

你可能感兴趣的文章
又一道软通动力7K月薪面试题——银行业务调度系统
查看>>
Matlab画图-非常具体,非常全面
查看>>
ReactJS入门
查看>>
linux网站配置文件.htaccess伪静态转换到IIS web.config中
查看>>
CodeForces 1B
查看>>
win10应用UserControl
查看>>
BZOJ4516: [Sdoi2016]生成魔咒(后缀自动机)
查看>>
查看手机已经记住的WIFI密码
查看>>
最新版IntelliJ IDEA2019 破解教程(2019.08.07-情人节更新)
查看>>
我是怎么用缠论在商品里边抢钱之二 (2019-07-12 15:10:10)
查看>>
python入门之正则表达式
查看>>
SAS学习经验总结分享:篇五-过程步的应用
查看>>
Android创建文件夹及文件并写入数据
查看>>
file的getPath getAbsolutePath和getCanonicalPath的不同
查看>>
课时4—切入切出动画
查看>>
eclipse 编辑 python 中文乱码的解决方案
查看>>
Python 爬虫的集中简单方式
查看>>
数据库MySQL/mariadb知识点——触发器
查看>>
Ubuntu做Tomcat服务:insserv: warning: script 'tomcat' missing LSB tags and overrides
查看>>
Binary Agents
查看>>