设计模式之工厂模式

开发过程当中,会遇到一些比较典型的场景,理解好这些典型场景,能够让我们在实现功能前,心中有框架,手上有工具,更好地开发产品。

一. 介绍

1.1 工厂模式就是要创建某种东西,“东西”可以理解为产品,这个产品和创建它的类不存在绑定关系,是一种松耦合。一般情况下,客户端会向工厂发出请求,由工厂创建所请求产品。当我们实例化对象的子类可能变化时,就要使用工厂模式。

创建对象的子类数目已知时,采用可预测方式制定数目。比如,开发世界地图时,不同对象表示七大洲,这就是数目固定的;
创建对象的子类数目未知时,程序必要要灵活。比如,统计图书馆中图书的类别时,可能会不断的发现有新的类别,或者之前的类别无法满足后续的需求,要被撤掉,要充分考虑到这种情况;

处理上面两种情况,此时就可以考虑使用工厂模式。

二.原理

实现的工厂方法类图

设计模式之工厂模式_第1张图片
捕获.PNG
client类是隐含的

client类包含Creator 工厂接口的一个引用,用于请求图像或者文本产品。client类只负责发出请求,不实例化产品,由具体的工厂实例化所请求的产品对象。Creator负责在接收到请求后,指挥并下发这个请求到到具体的工厂类中,去实例化产品。

三.实现

3.1建立工厂:creator 接口
factoryMethod($countryProduct);
    return $mfg;
  }
}

factoryMethod 和doFactory 都需要参数,接口接收参数,创建并返回不同的产品对象。

3.2创建产品

3.2.1产品接口

产品接口,具体的产品对象必须有相同的接口。getProperties函数返回产品给客户。
3.2.2产品demo

countryTxt = file_get_contents('test.txt');

    $this->formatHelper = new FormatHelper();
    $this->mfgProduct = $this->formatHelper->addTop();
    $this->mfgProduct.= <<
    

$this->countryTxt

KYRGYZSTAN; ; $this->mfgProduct .= $this->formatHelper->closeUp(); return $this->mfgProduct; } }

产品中输出了一个图片,以及一段文本。这里面包含一个辅助类FormatHelper,负责公共的html标签处理。

3.3 辅助类FormatHelper
 topper = "
            
            
            Map Factory
            ";
        return $this->topper;
}
  public function closeUp(){
      $this->bottom = "";
      $this->bottom;
  }
}
3.4 有参数的客户
countryFactory = new CountryFactory();
        echo $this->countryFactory->doFactory(new       KyrgyzstanProduct());

      }
}
$worker = new Client();

客户通过特定产品工厂的工厂接口做出一个请求,请求中包含参数,指明要请求的产品内容。

总结

开发过程中,与其尝试让任意数目的类和对象都保持不变,不如保持接口不变更为容易。使用工厂模式可以简化复杂的创建过程,关键就在于它会维持一个公用接口。

你可能感兴趣的:(设计模式之工厂模式)