PHP设计模式之Factory模式

    技术2022-05-20  61

    Factory有两个特点:

    1)定义创建对象的接口,封装了对象的创建; 2)使得具体化类的工作延迟到了子类中。

    这些特点应用到具体项目中可以使得我们在项目初期需要知道其他人实现的具体有哪些类,只需要调用某个基类,通过基类我们可以不断增加子类来满足系统不断扩展的要求,体现了软件项目中自顶向下的分析的过程。一下是这个过程的UML示意图:

     

     

     

    以下代码来源于一个大牛的博客:http://www.phppan.com/?s=设计模式

     

    <?php /** * 工厂模式 2010-06-25 sz * @author 胖子 phppan.p#gmail.com http://www.phppan.com * 哥学社成员(http://www.blog-brother.com/) * @package design pattern */ /** * 抽象工厂角色 */ interface Creator { public function factoryMethod(); } /** * 具体工厂角色A */ class ConcreteCreatorA implements Creator { /** * 工厂方法 返回具体 产品A * @return ConcreteProductA */ public function factoryMethod() { return new ConcreteProductA(); } } /** * 具体工厂角色B */ class ConcreteCreatorB implements Creator { /** * 工厂方法 返回具体 产品B * @return ConcreteProductB */ public function factoryMethod() { return new ConcreteProductB(); } } /** * 抽象产品角色 */ interface Product { public function operation(); } /** * 具体产品角色A */ class ConcreteProductA implements Product { /** * 接口方法实现 输出特定字符串 */ public function operation() { echo 'ConcreteProductA <br />'; } } /** * 具体产品角色B */ class ConcreteProductB implements Product { /** * 接口方法实现 输出特定字符串 */ public function operation() { echo 'ConcreteProductB <br />'; } } class Client { /** * Main program. */ public static function index() { $creatorA = new ConcreteCreatorA(); $productA = $creatorA->factoryMethod(); $productA->operation(); $creatorB = new ConcreteCreatorB(); $productB = $creatorB->factoryMethod(); $productB->operation(); } } Client::index(); ?>


    最新回复(0)