漫談設計モデルの工場モデル


今日はここでデザインモードとなぜ使うのかをたくさん紹介します.漫談設計モードの組合せモードを参照できます.
一、抽象工場設計モデルとは何ですか.
一言で言えば、抽象工場は機能関連のクラスを作成するために使用されます.
二、どんなシーンで使いますか.
名前の通り、私たちのビジネスでは、クエリーページがあり、多くのクエリー条件があります.最終的には、これらのクエリー条件を組み合わせて実際に欲しいデータをクエリーします.どうすればいいですか?次は私の設計で、単例、工場と戦略モデルを運用して、すべてインタフェース向けにプログラミングしました.
三、設計構想
1、ポリシーインタフェースを定義し、format方法を定義する
2、実際の業務によって3種類の策略を抽象化して、1、あいまいなクエリー、2、クエリーに等しくて、3、特殊な処理を経なければならないクエリー
3、抽象工場を定義し、必要に応じて3種類の策略オブジェクトを初期化する
4、統一入口TutorConditionFormatterを定義し、工場オブジェクトを作成し、工場オブジェクトはポリシーオブジェクトを作成し、ポリシーオブジェクトはデータを処理し、最後に要求フォーマットに戻る
5、業務中に直接TutorConditionFormatterを呼び出す
 2) {
                $aCondition[] = sprintf('nationality >=3');
            } else {
                $aCondition[] = sprintf("nationality = %d",$aParams['nationality']);
            }
        }

        if (isset($aParams['resume']) && !empty($aParams['resume'])) {
            if (self::HAVE_RESUME == $aParams['resume']) {
                $aCondition[]   = sprintf("resume <> ''");
            } elseif (self::NONE_RESUME == $aParams['resume']) {
                $aCondition[]   = sprintf("resume = ''");
            }
        }

        if (isset($aParams['sourcing_team']) && !empty($aParams['sourcing_team'])) {
            if (is_array($aParams['sourcing_team'])) {
                $aCondition[]   = sprintf("sourcing_team in('%s')",implode("','", $aParams['sourcing_team']));
            } else {
                $aCondition[]   = sprintf("sourcing_team = %s",$aParams['sourcing_team']);
            }
        }

        if (isset($aParams['demo_time_start']) && !empty($aParams['demo_time_start'])) {
            $aCondition[]       = sprintf("demo_result_date >= '%s 00:00:00'",$aParams['demo_time_start']);
        }
        if (isset($aParams['demo_time_end']) && !empty($aParams['demo_time_end'])) {
            $aCondition[]       = sprintf("demo_result_date <= '%s 23:59:59'",$aParams['demo_time_end']);
        }

        return $aCondition;
    }
}


_oFactory == null) {
            $this->register();
        }
    }

    /**
     * @return TutorConditionFactory|null
     */
    public static function getInstance()
    {
        if (self::$_instance == null) {
            self::$_instance = new TutorConditionFactory();
        }
        return self::$_instance;
    }

    /**
     *      
     * @return $this
     */
    public function register()
    {
        $this->_oFactory['equal']           = __NAMESPACE__ . '\TutorConditionEqualFormatter';
        $this->_oFactory['like']            = __NAMESPACE__ . '\TutorConditionLikeFormatter';
        $this->_oFactory['special']         = __NAMESPACE__ . '\TutorConditionSpecialFormatter';
        return $this;
    }

    /**
     *      
     * @param $type
     * @return mixed
     * @throws \Exception
     */
    public function create($type)
    {
        if (!array_key_exists($type,$this->_oFactory)) {
            throw new \Exception(sprintf("%s is not valid",$type));
        }

        $producer   = $this->_oFactory["$type"];
        return new $producer();
    }
}


_aFormatter  = ['equal','like','special'];
    }

    public function format($aParams)
    {
        $oFactory       = ConditionFactoryFormatter\TutorConditionFactory::getInstance();

        //  p psize, tutor  
        unset($aParams['p'],$aParams['psize']);

        $aCondition[]   = sprintf("training_type_id >=1");
        if (empty($aParams)) {
            return $aCondition;
        }
        
        //           ,       
        foreach ($this->_aFormatter as $formatter)
        {
            $oProducer  = $oFactory->create($formatter);
            $item       = $oProducer->format($aParams);
            $aCondition = array_merge($aCondition,$item);
        }
        unset($formatter,$item,$aParams);

        return array_unique($aCondition);
    }
}


//        
format($aSearch);

転載先:https://blog.51cto.com/mrcelite/1932030