zoukankan      html  css  js  c++  java
  • 工厂模式

    概念

    工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。笼统的说,输入不同的要求就实例化不同的对象。就是一个类所依赖的外部事物的实例,都可以被一个或多个 “工厂” 创建的这样一种开发模式,就是 “工厂模式”。其实根据实际情况,像工厂做的所有的产品是有共同的特点,不同的只是产品的一些外观,但这些都是可调整的。

    运用场景

    一般在框架中运用比较多,比如laravel中操作数据库,有Eloquent ORM,queryBuilder。

    实现

    要定义一个抽象基类或一个接口,让子类去实现方法。定义一个工厂类实例化所有的子类。

    interface factoryInterface
    {
        public function people();
    }
    
    class  Girl implements factoryInterface
    {
    
        public function people()
        {
            // TODO: Implement people() method.
            echo '这是girl做的事';
        }
    }
    //在此类中可以定义boy独有的方法
    class Boy implements factoryInterface
    {
        public function people()
        {
            // TODO: Implement people() method.
            echo '这是boy做的事';
        }
    }
    
    //工厂类用于实例化所有的子类
    class  Factory
    {
        protected $type;
    
        function __construct($type)
        {
            $this->type = $type;
        }
    
        public function select()
        {
            switch (strtolower($this->type)) {
                case 'girl':
                    return new  Girl();
                    break;
                case 'boy':
                    return new Boy();
                default:
                    echo '什么也没有';
            }
        }
    }
    $getObject = (new  Factory('girl'))->select();
    $getObject->people();
    $getObject = (new  Factory('boy'))->select();
    $getObject->people();
  • 相关阅读:
    POJ 3710 Christmas Game#经典图SG博弈
    POJ 2599 A funny game#树形SG(DFS实现)
    POJ 2425 A Chess Game#树形SG
    LeetCode Array Easy 122. Best Time to Buy and Sell Stock II
    LeetCode Array Easy121. Best Time to Buy and Sell Stock
    LeetCode Array Easy 119. Pascal's Triangle II
    LeetCode Array Easy 118. Pascal's Triangle
    LeetCode Array Easy 88. Merge Sorted Array
    ASP.NET MVC 学习笔记之 MVC + EF中的EO DTO ViewModel
    ASP.NET MVC 学习笔记之面向切面编程与过滤器
  • 原文地址:https://www.cnblogs.com/webph/p/6735321.html
Copyright © 2011-2022 走看看