博主信息
博文 25
粉丝 0
评论 1
访问量 26089
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
23种设计模式之工厂模式
潜轲的博客
原创
1034人浏览过

原理介绍:

工厂设计模式常用于根据输入参数的不同或者应用程序配置的不同来创建一种专门用来实例化并返回其对应的类的实例

个人理解为:就像一个制造各种玩具的工厂,如果指示制作玩具车就制造玩具车,制作方法一样,具体实现不一样,通过指定参数的类型或数目来决定制造。

<?php

//定义一个接口,让类实现接口的规范,接口中定义的方法皆为抽象的,都需要实现
interface InterfaceShape
{
   function getArea();
   function getCircumference();
}

/**
* 矩形
*/
class Rectangle implements InterfaceShape
{
   private $width;
   private $height;
   public function __construct($width, $height)
   {
   $this->width = $width;
   $this->height = $height;
   }

 public function getArea()
 {
   return $this->width* $this->height;
 }

 public function getCircumference()
 {
   return 2 * $this->width + 2 * $this->height;
 }
}

/**
* 圆形
*/
class Circle implements InterfaceShape
{
   private $radius;

   public function __construct($radius)
   {
       $this->radius = $radius;
   }

   public function getArea()
   {
       return M_PI * pow($this->radius, 2);
   }

   public function getCircumference()
   {
       return 2 * M_PI * $this->radius;
   }
}

/**
* 形状工厂类
*/
class FactoryShape
{
   //通过判断参数来判断创建哪个类
   public static function create()
   {
   switch (func_num_args())
   {
   case 1://一个参数
       return new Circle(func_get_arg(0));
       break;
   case 2://两个参数
       return new Rectangle(func_get_arg(0), func_get_arg(1));
   default:
       echo "参数不正确";
       break;
   }
 }
}

$rect =FactoryShape::create(5, 5);
// object(Rectangle)#1 (2) { ["width":"Rectangle":private]=> int(5) ["height":"Rectangle":private]=> int(5) }
var_dump($rect);
echo "<br>";

// object(Circle)#2 (1) { ["radius":"Circle":private]=> int(4) }
$circle =FactoryShape::create(4);
var_dump($circle);

?>


因为正在学习中,源码来源于网络,自己对原理进行了分析

工厂模式主要有三大块:

一个规范的接口:定义这个工厂的模板(类)实现的功能

几个实现功能的类:定义几个实现功能的

一个工厂类:根据参数类型和个数判断来实例化哪个类的类,直接定义一个静态方法,使这个工厂类无需实例化,即可以挑选创建哪个对象。


本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学