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();
  • 相关阅读:
    Codeforces 1255B Fridge Lockers
    Codeforces 1255A Changing Volume
    Codeforces 1255A Changing Volume
    leetcode 112. 路径总和
    leetcode 129. 求根到叶子节点数字之和
    leetcode 404. 左叶子之和
    leetcode 104. 二叉树的最大深度
    leetcode 235. 二叉搜索树的最近公共祖先
    450. Delete Node in a BST
    树的c++实现--建立一棵树
  • 原文地址:https://www.cnblogs.com/webph/p/6732620.html
Copyright © 2011-2022 走看看