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