이 글에서는 PHP 디자인 패턴 중 간단한 팩토리 패턴을 예제 형식으로 좀 더 자세히 소개하고 있는데, 이는 PHP 프로그램 디자인에 좋은 참고 자료가 됩니다. 자세한 내용은 다음과 같습니다.
1. 개념
간단한 팩토리 패턴 [Static Factory Method 패턴](Static Factory Method)
은 클래스 생성 패턴입니다
여러 개 팩토리 패턴의 형태:
1. 단순 팩토리 패턴(Simple Factory)은 정적 팩토리 메소드 패턴(Static Factory Method)이라고도 합니다.
2. 팩토리 메소드 패턴은 Polymorphic Factory Pattern(Polymorphic Factory)이라고도 합니다
3. Abstract Factory 패턴(Abstract Factory)은 ToolKit 패턴(ToolKit)이라고도 합니다
2. 그림 분석:
3. 코드 예제
다음과 같이 예제 코드가 테스트되었으며 실행될 수 있습니다.
<?php /** * 一个事例 * * 一个农场,要向市场销售水果 * 农场里有三种水果 苹果、葡萄 * 我们设想:1、水果有多种属性,每个属性都有不同,但是,他们有共同的地方 | 生长、种植、收货、吃 * 2、将来有可能会增加新的水果、我们需要定义一个接口来规范他们必须实现的方法 * 3、我们需要获取某个水果的类,要从农场主那里去获取某个水果的实例,来知道如何生长、种植、收货、吃 */ /** * 虚拟产品接口类 * 定义好需要实现的方法 */ interface fruit{ /** * 生长 */ public function grow(); /** * 种植 */ public function plant(); /** * 收获 */ public function harvest(); /** * 吃 */ public function eat(); } /** * 定义具体产品类 苹果 * 首先,我们要实现所继承的接口所定义的方法 * 然后定义苹果所特有的属性,以及方法 */ class apple implements fruit{ //苹果树有年龄 private $treeAge; //苹果有颜色 private $color; public function grow(){ echo "grape grow"; } public function plant(){ echo "grape plant"; } public function harvest(){ echo "grape harvest"; } public function eat(){ echo "grape eat"; } //取苹果树的年龄 public function getTreeAge(){ return $this->treeAge; } //设置苹果树的年龄 public function setTreeAge($age){ $this->treeAge = $age; return trie; } } /** * 定义具体产品类 葡萄 * 首先,我们要实现所继承的接口所定义的方法 * 然后定义葡萄所特有的属性,以及方法 */ class grape implements fruit{ //葡萄是否有籽 private $seedLess; public function grow(){ echo "apple grow"; } public function plant(){ echo "apple plant"; } public function harvest(){ echo "apple harvest"; } public function eat(){ echo "apple eat"; } //有无籽取值 public function getSeedLess(){ return $this->seedLess; } //设置有籽无籽 public function setSeedLess($seed){ $this->seedLess = $seed; return true; } } /** *农场主类 用来获取实例化的水果 * */ class farmer{ //定义个静态工厂方法 public static function factory($fruitName){ switch ($fruitName) { case 'apple': return new apple(); break; case 'grape': return new grape(); break; default: throw new badFruitException("Error no the fruit", 1); break; } } } class badFruitException extends Exception{ public $msg; public $errType; public function __construct($msg = '' , $errType = 1){ $this->msg = $msg; $this->errType = $errType; } } /** * 获取水果实例化的方法 */ try{ $appleInstance = farmer::factory('apple'); var_dump($appleInstance); }catch(badFruitException $err){ echo $err->msg . "_______" . $err->errType; }
PHP 디자인 패턴 중 Simple Factory Pattern에 대한 자세한 설명과 관련 글은 PHP 중국어 홈페이지를 주목해주세요!