设计模式学习笔记——工厂模式
时间:2011-10-02
来源:互联网
看到的对工厂模式的一段生动的描述,转述一下:
追女孩子难免不了要请女孩子吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是大多女孩子的最爱,虽然口味有所不同,但是无论是到麦当劳还是肯德基,只要向服务员说“来四个鸡翅”就可以了。——麦当劳和肯德基就是生产鸡翅的工厂。
工厂模式:客户类与工厂类分离。消费者需要某种产品,直接向工厂请求即可。消费者无需修改就可以获得新产品。
刚才那段描述中,麦当劳和肯德基就属于工厂类,鸡翅就是产品类。
缺点:产品类作出修改时,可能工厂类也需要相应的修改。
PHP代码示例:
<?php
/*工厂模式 接口部分*/
interface abstracted
{
public function realCreate();
}
/*女孩类*/
class girl
{
public function action()
{
echo "女孩很漂亮";
}
}
/*男孩类*/
class boy
{
public function action()
{
echo "男孩很好强";
}
}
/*制造女孩*/
class GirlCreator implements abstracted
{
public $chromosome; //染色体
public function realCreate()
{
if($this->chromosome=='xx')
{
return new girl();
}
}
}
/*制造男孩*/
class BoyCreator implements abstracted
{
public $chromosome;
public function realCreate()
{
if($this->chromosome=='xy' || $this->chromosome=='xyy')
{
return new boy();
}
}
}
/*人类工厂*/
class PersonFactory
{
public function create($what)
{
$create=$what.'Creator';
$create=new $create();
return $create;
}
}
$create=new PersonFactory();
$instance=$create->create('Girl');
$instance->chromosome='xx';
$instance->realCreate()->action();
?>
追女孩子难免不了要请女孩子吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是大多女孩子的最爱,虽然口味有所不同,但是无论是到麦当劳还是肯德基,只要向服务员说“来四个鸡翅”就可以了。——麦当劳和肯德基就是生产鸡翅的工厂。
工厂模式:客户类与工厂类分离。消费者需要某种产品,直接向工厂请求即可。消费者无需修改就可以获得新产品。
刚才那段描述中,麦当劳和肯德基就属于工厂类,鸡翅就是产品类。
缺点:产品类作出修改时,可能工厂类也需要相应的修改。
PHP代码示例:
<?php
/*工厂模式 接口部分*/
interface abstracted
{
public function realCreate();
}
/*女孩类*/
class girl
{
public function action()
{
echo "女孩很漂亮";
}
}
/*男孩类*/
class boy
{
public function action()
{
echo "男孩很好强";
}
}
/*制造女孩*/
class GirlCreator implements abstracted
{
public $chromosome; //染色体
public function realCreate()
{
if($this->chromosome=='xx')
{
return new girl();
}
}
}
/*制造男孩*/
class BoyCreator implements abstracted
{
public $chromosome;
public function realCreate()
{
if($this->chromosome=='xy' || $this->chromosome=='xyy')
{
return new boy();
}
}
}
/*人类工厂*/
class PersonFactory
{
public function create($what)
{
$create=$what.'Creator';
$create=new $create();
return $create;
}
}
$create=new PersonFactory();
$instance=$create->create('Girl');
$instance->chromosome='xx';
$instance->realCreate()->action();
?>
作者: 星汉 发布时间: 2011-10-02
代码示例二:
<?php
interface Iuser
{
function getName();
}
class User implements Iuser
{
public function _construct($id)
{
}
public function getName()
{
return 'jack';
}
}
class UserFactory
{
public static function create($id)
{
return new User($id);
}
}
$uo=UserFactory::create(1);
echo $uo->getName().'</br>';
?>
<?php
interface Iuser
{
function getName();
}
class User implements Iuser
{
public function _construct($id)
{
}
public function getName()
{
return 'jack';
}
}
class UserFactory
{
public static function create($id)
{
return new User($id);
}
}
$uo=UserFactory::create(1);
echo $uo->getName().'</br>';
?>
作者: 星汉 发布时间: 2011-10-02
有一种工厂模式的变体使用工厂方法。类中的这些公共静态方法构造该类型的对象。如果创建此类型的对象非常重要,此方法非常有用。比如需要先创建对象,然后设置许多属性。这种版本的工厂模式会将该进程封装在单个位置中,这样,不用复制复杂的初始化代码,也无须将复制好的代码在代码库中到处粘贴。
显示使用工厂方法的PHP代码示例:
<?php
interface IUser
{
function getName();
}
class User implements IUser
{
public static function Load($id)
{
return new User($id);
}
public static function Create()
{
return new User(null);
}
public static function _construct($id)
{
;
}
public function getName()
{
return 'jack';
}
}
$uo=User::Load(1);
echo $uo->getName().'</br>';
?>
显示使用工厂方法的PHP代码示例:
<?php
interface IUser
{
function getName();
}
class User implements IUser
{
public static function Load($id)
{
return new User($id);
}
public static function Create()
{
return new User(null);
}
public static function _construct($id)
{
;
}
public function getName()
{
return 'jack';
}
}
$uo=User::Load(1);
echo $uo->getName().'</br>';
?>
作者: 星汉 发布时间: 2011-10-02
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28