设计模式--工厂模式

一、讲解

自百度百科:http://baike.baidu.com/view/1306799.htm

         工厂模式定义:实例化对象,用工厂方法代替new操作.

         首先,我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。

使用工厂方法 要注意三个角色,首先你要定义产品接口类,如上面的Sample,产品接口下有Sample接口的实现类,如SampleA,其次要有一个factory类,用来生成产品Sample。

          由此可见,工厂方法确实为系统结构提供了非常灵活强大的动态扩展机制,只要我们更换一下具体的工厂方法,系统其他地方无需一点变换,就有可能将系统功能进行改头换面的变化。


PHP例子:

<?php
interface abstracted{
    public function realCreate();
}
//女人类
class Woman{
    public function action(){
        echo '这是女人';
    }
}
//男人类
class Man{
    public function action(){
        echo '这是男人';
    }
}

//创建女人
class WomanCreator implements abstracted {
    public $chromosome;//染色体
    public function realCreate(){
        if ($this->chromosome == "xx") {
            return new Woman();
        }
    }
}
//创建男人
class ManCreator implements abstracted {
    public $chromosome;
    public function realCreate(){
        if ($this->chromosome == "xy" || $this->chromosome == "xyy") {
            return new Man();
        }
    }
}
//人类工厂
class PersonFactory{
    public function create($what){
        $create = $what."Creator";
        return $create = new $create();
    }
}

$create = new PersonFactory();
$instance = $create->create('Woman');
$instance->chromosome = "xx";
$instance->realCreate()->action(); 


?>

二、分类

另外,参考‘珍山钙茶’的博客:http://www.cnblogs.com/poissonnotes/archive/2010/12/01/1893871.html

二、简介
工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类:
1. 简单工厂模式(Simple Factory)
2. 工厂方法模式(Factory Method)
3. 抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。下面是使用工厂模式的两种情况:
1.在编码时不能预见需要创建哪种类的实例。
2.系统不应依赖于产品类实例如何被创建、组合和表达的细节


三 其他常见的设计模式

     https://www.ibm.com/developerworks/cn/opensource/os-php-designptrns/

    工厂模式、单元素模式、观察者模式、命令链模式、策略模式 等





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值