简单工厂模式是工厂模式的精简,简单工厂模式是工厂模式的精简型

  简单工厂模式是工厂模式的精简,简单工厂模式是工厂模式的精简型

  的所有创建模式都涉及创建对象样本的方式。这很重要,因为程序不应该依赖于对象是如何创建和排列的。当然,使用new运算符是C#创建对象最简单的方法。但是实际上相当于硬编码了,关系到程序中如何创建对象管理。在大多数情况下,创建对象的初衷随着程序的需要而变化。将一个抽象对象创建成一个特殊的“creator”类,会使程序更加灵活和通用。工厂方法模式提供了一个简单的决策类,它根据提供的数据返回抽象基类的许多子类之一。

  抽象工厂(抽象

  工厂模式)提供了创建和返回一系列相关对象的接口。

  单一模式(单一

  Pattern)意味着一个类只能有一个实例。它提供了实例的全局访问点。

  生成器模式(生成器

  Pattern)将复杂对象的构造与表示分离,这样就可以根据程序的需要创建不同的表示。

  原型模式(原型

  Pattern)是先实例化一个类,然后复制或克隆该类创建一个新的实例,可以通过常用的方法进一步修改。

  简单工厂

  简单模式根据提供给他的数据返回几个可能的类的一个实例。通常,他返回的类有一个共同的父类和一个共同的方法,但每个方法执行不同的任务。

  而且是根据不同的数据进行优化,简单共产模型实际上并不属于23GoF模型。

  为了理解简单的共产主义模型,让我们看看下面的图片。在这个图中,X是一个基类,由其派生出XY类和XZ类,XFactory类根据给定的参数决定返回哪个子类。

  右边定义了一个getClass方法,给他传递一个值比如(abc),然后放回X类的一个实例中,返回哪个类实例与程序员无关,

  因为这些类的方法是一样的,只是实现不一样。返回哪个类的权力完全取决于工厂。工厂函数可能很复杂,但通常非常简单。

  让我们看一个例子。

  假设我们有一个表单,表单顶部的输入框只允许您输入名字和姓氏。使用,分隔姓和名。

  首先,构建一个基类

  命名者

  使用系统;

  2

  3命名空间名称工厂

  4 {

  5 ///摘要

  6 ///

  命名者的摘要描述。

  7////摘要

  8//基数

  获取拆分名称的类

  9公共类命名器{

  10//件

  储存在这里

  11受保护的字符串frName,lName

  12

  13//返回

  西方人名的第一个字

  14公共字符串getFrname(){

  15返回frName

  16 }

  17//返回

  姓

  18公共字符串getLname() {

  19返回lName

  20 }

  21 }

  22 }

  派生两个子类,然后写两个简单的派生类,实现接口,在构造函数里把名字分成两部分。

  在第一节课。我做了一个简单的假设:最后一个巴掌大的空格前面的所有部分都属于姓‘first name’

  使用系统;

  2

  3命名空间名称工厂

  4 {

  5 ///摘要

  6 ///

  FirstFirst的摘要说明。

  7////摘要

  8公共类FirstFirst : Namer

  9 {

  10 public FirstFirst(字符串名称)

  11 {

  12 int i=name。index of(“”);

  13 if(i 0) {

  14 frName=name。子链

  (0,I)。trim();

  15 lName=名称。子链

  (i 1)。trim();

  16 }

  17其他{

  18 lName=name

  19 frName=“”;

  20 }

  21 }

  22 }

  23 }

  在lastfirst,class中,用逗号分隔lastname。当空格逗号不存在时,两个类都提供错误处理。

  1使用系统;

  2

  3命名空间名称工厂

  4 {

  5 ///摘要

  6 ///

  LastFirst的摘要说明。

  7////摘要

  8公共类LastFirst : Namer

  9 {

  10 public LastFirst(字符串名称){

  11 int i=name。IndexOf(,);

  12 if(i 0) {

  13 lName=名称。子链

  (0,I);

  14 frName=name。子链

  (i 1)。trim();

  15 }

  16其他{

  17 lName=name

  18 frName=“”;

  19 }

  20 }

  21 }

  22 }

  工厂

  1使用系统;

  2

  3命名空间名称工厂

  4 {

  5 ///摘要

  6 ///的摘要说明

  NameFactory。

  7////摘要

  8公共类名Factory {

  9 public NameFactory() {}

  10

  11公共命名器getName(字符串名称){

  12 int i=name。IndexOf(,);

  13如果(i 0)

  14返回新的last first(name);

  其他15个

  16返回新FirstFirst(名称);

  17 }

  18 }

  19 }

  使用工厂

  1命名者nm=

  nameFact.getName (txName。正文);

  2 txFirst。Text=nm.getFrname

  ();

  3 txLast。文本=

  nm . getlname();

  简单工厂有相同的方法类。

  实例,可以是不同派生子类的实例,也可以是实际上没有任何关系但共享同一个接口的类。不管形式如何,这些类实例中的方法必须相同。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: