Welcome to the website navigation,本站只接受合法正规的企业网站,欢迎站长们提交你的网站获得展示和流量有任何问题请联系站长,欢迎大家加入本站。

                
提交网站
  • 网站:76083
  • 待审:5
  • APP:577
  • 文章:304411
  • 会员:56004
文字内链包年1000元 文字内链包年1000元 文字内链包年1000元 AI办公网站 AI绘画工具 AIchat

名站导航为爱好php程序的朋友们提供php相关的教程知识。

理解PhP程序的工厂模式Factory Pattern6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

工厂类就是一个专门用来创建其它对象的类,工厂类在多态性编程实践中是非常重要的。它允许动态替换类,修改配置,会使应用程序更加灵活。掌握工厂模式对Web开发是必不可少的。6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

工厂模式通常用来返回类似接口的不同的类,工厂的一种常见用法就是创建多态的提供者。6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

通常工厂模式有一个关键的构造,即一般被命名为factory的静态方法。这个静态方法可以接受任意数量的参数,并且必须返回一个对象。6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

Program List:基本的工厂类6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

    6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

<?php
class Fruit {
// 对象从工厂类返回
}
Class FruitFactory {
public static function factory() {
// 返回对象的一个新具体实例操作
return new Fruit();
}
}
// 调用工厂
$instance = FruitFactory::factory();
?>

Program List:利用工厂类生产对象6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

    6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

<?php
class Example
{
    // The parameterized factory method
    public static function factory($type)
    {
        if (include_once 'Drivers/' . $type . '.php') {
            $classname = 'Driver_' . $type;
            return new $classname;
        } else {
            throw new Exception('Driver not found');
        }
    }
}
// Load a MySQL Driver
$mysql = Example::factory('MySQL');
// Load an SQLite Driver
$sqlite = Example::factory('SQLite');
?>

Program List:一个完整的工厂类6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

下面的程序定义了一个通用的工厂类,它生产能够保存你所有操作的空对象,(www.mzdh.net 网站建设 )你可以获得一个具体实例操作,这些操作都在那个具体实例操作中了。6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

<?php
    
    /**
     * Generic Factory class
     *
     * This Magic Factory will remember all operations you perform on it,
     * and apply them to the object it instantiates.
     *
     */
    class FruitFactory {
        private $history, $class, $constructor_args;
        
        /**
         * Create a factory of given class. Accepts extra arguments to be passed to
         * class constructor.
         */
        function __construct( $class ) {
            $args = func_get_args();
            $this->class = $class;
            $this->constructor_args = array_slice( $args, 1 );
        }
        
        function __call( $method, $args ) {
            $this->history[] = array(
                'action'    => 'call',
                'method'    => $method,
                'args'   => $args
            );
        }
        
        function __set( $property, $value ) {
            $this->history[] = array(
                'action'    => 'set',
                'property'    => $property,
                'value'        => $value
            );
        }
        
        /**
         * Creates an instance and performs all operations that were done on this MagicFactory
         */
        function instance() {
            # use Reflection to create a new instance, using the $args 
            $reflection_object = new ReflectionClass( $this->class ); 
            $object = $reflection_object->newInstanceArgs( $this->constructor_args ); 
            
            # Alternative method that doesn't use ReflectionClass, but doesn't support variable
            # number of constructor parameters.
            //$object = new $this->class();
            
            # Repeat all remembered operations, apply to new object.
            foreach( $this->history as $item ) {
                if( $item['action'] == 'call' ) {
                    call_user_func_array( array( $object, $item['method'] ), $item['args'] );
                }
                if( $item['action'] == 'set' ) {
                    $object->{$item['property']} = $item['value'];
                }
            }
            
            # Done
            return $object;
        }
    }
    
    class Fruit {
        private $name, $color;
        public $price;
        
        function __construct( $name, $color ) {
            $this->name = $name;
            $this->color = $color;
        }
        
        function setName( $name ) {
            $this->name = $name;
        }
        
        function introduce() {
            print "hello, this is an {$this->name} {$this->sirname}, its price is {$this->price} RMB.";
        }
    }
    
    # Setup a factory
    $fruit_factory = new FruitFactory('Fruit', 'Apple', 'Gonn');
    $fruit_factory->setName('Apple');
    $fruit_factory->price = 2;
    
    # Get an instance
    $apple = $fruit_factory->instance();
    $apple->introduce();
?>

程序运行结果:6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

hello, this is an Apple , its price is 2 RMB.6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

工厂模式可以分为三类:6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

简单工厂模式(Simple Factory)6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

工厂方法模式(Factory Method)6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

抽象工厂模式(Abstract Factory)6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

这三种模式从上到下逐步抽象,并且更具一般性。6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

工厂方法模式仿佛已经很完美的对对象的创建进行了包装,使得客户程序中仅仅处理抽象产品角色提供的接口。那我们是否一定要在具体代码如下中遍布工厂呢?大可不必。也许在下面情况下你可以考虑使用工厂方法模式:6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

当客户程序不需要知道要使用对象的创建过程。6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

名站网址导航

PhP程序函数:number_format()用法6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

先来看看程序例子吧。6eGAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

好了关于php程序的知识就说到这里希望可以帮助需要的朋友。,工厂模式

标签:工厂模式

分享到:

  admin

注册时间:

网站:0 个   APP:3 个  文章:0 篇

  • 76083

    网站

  • 577

    APP

  • 304411

    文章

  • 56004

    会员

赶快注册账号,推广您的网站吧!
文章分类
热门网站
最新入驻APP小程序

宝贝市场2023-02-08

宝贝市场——买手和卖家商品展示

夺宝助手2023-02-08

夺宝助手小程序,查看每日快夺宝平

查诚信2023-02-08

查诚信是一款免费的商业查询工具

车价天天报2023-02-08

快速连接汽车销售,获知汽车最新报

考勤助理小程序2023-02-08

上班签到考勤,实时定位,后台轻松

汽车报价大全查询2023-02-08

汽车报价大全查询提供最新汽车市