// 开发模式之工程模式 // 工厂模式: // 由工厂类根据参数来决定创建出哪一种产品类的实例; // 工厂类是指包含了一个专门用来创建其他对象的方法的类。所谓按需分配,传入参数进行选择,返回具体的类。 // 工厂模式的最主要作用就是对象创建的封装、简化创建对象操作。 // 简单的说,就是调用工厂类的一个方法(传入参数)来得到需要的类; //示例1 最基本的工厂模式 class Myname{ public function OutPutMyName(){ return 'name is rongyouyuan!~'; } } class NameFactory{ public static function Namefunc(){ return new Myname(); } } $obj=NameFactory::Namefunc(); echo $obj->OutPutMyName(); ?>
위는 가장 간단한 팩토리 패턴입니다. 다음은 팩토리 패턴을 사용하여 간단한 계산기를 구현합니다
<?php //定义一个抽象类 abstract class operation { protected $_numA = 0; protected $_numB = 0; protected $_result = 0; public function __construct($a, $b) { $this->_numA = $a; $this->_numB = $b; } //抽象方法所有子类必须实现该方法 protected abstract function getResult(); } //加法运算 class operationAdd extends operation { public function getResult() { $this->_result = $this->_numA + $this->_numB; return $this->_result; } } //减法运算 class operationSub extends operation { public function getResult() { $this->_result = $this->_numA - $this->_numB; return $this->_result; } } //乘法运算 class operationMul extends operation { public function getResult() { $this->_result = $this->_numA * $this->_numB; return $this->_result; } } //除法运算 class operationDiv extends operation { public function getResult() { $this->_result = $this->_numA / $this->_numB; return $this->_result; } } //定义工厂类 class operationFactory { //创建保存示例的静态成员变量 private static $obj; //创建实例的静态方法 public static function CreateOperation($type, $a, $b) { switch ($type) { case '+': self::$obj = new operationAdd($a, $b); break; case '-': self::$obj = new operationSub($a, $b); break; case '*': self::$obj = new operationMul($a, $b); break; case '/': self::$obj = new operationDiv($a, $b); break; } //最后返回这个实例 return self::$obj; } } //最后我们使用工厂模式 $obj = operationFactory::CreateOperation('+', 100, 20); echo $obj->getResult();
마지막으로 추상 팩토리
를 정의합니다. 관련 집합 또는 구체적인 클래스를 지정하지 않고 상호 의존적인 개체에 대한 인터페이스를 제공합니다.
유형: 클래스 패턴 생성
클래스 다이어그램:
추상 팩토리 패턴과 팩토리 메소드 패턴의 차이점
추상 팩토리 패턴은 팩토리 메소드 패턴의 업그레이드 버전으로, 관련되거나 상호 의존적인 객체 세트를 생성하는 데 사용됩니다. 팩토리 메소드 패턴과의 차이점은 팩토리 메소드 패턴이 제품 계층 구조를 대상으로 하는 반면 추상 팩토리 패턴은 여러 제품 계층 구조를 대상으로 한다는 것입니다. 프로그래밍에서 제품 구조는 일반적으로 인터페이스 또는 추상 클래스로 표현됩니다. 즉, 팩토리 메소드 패턴이 제공하는 모든 제품은 동일한 인터페이스 또는 추상 클래스에서 파생되는 반면 추상 팩토리 패턴이 제공하는 제품은 파생됩니다. 다른 인터페이스나 추상 클래스에서.
추상 팩토리 패턴에는 제품군 개념이 있습니다. 소위 제품군은 다양한 제품 계층 구조에 위치한 기능적으로 관련된 제품군을 의미합니다. 추상 팩토리 패턴에 의해 제공되는 일련의 제품은 제품군을 구성하는 반면, 팩토리 메소드에 의해 제공되는 일련의 제품은 계층 구조라고 합니다. 우리는 여전히 자동차 생산의 예를 사용하여 이들 간의 차이점을 설명합니다.
위의 클래스 다이어그램에서 해치백과 세단은 서로 다른 두 가지 계층 구조로 불리고, 2.0 배기량 자동차와 2.4 배기량 자동차는 서로 다른 두 제품군으로 불립니다. 보다 구체적으로 말하면, 2.0 배기량 해치백과 2.4 배기량 해치백은 동일한 레벨 구조에 속하고, 2.0 배기량 세단과 2.4 배기량 세단은 다른 레벨 구조에 속하며, 2.0 배기량 해치백과 2.0 배기량 세단은 다른 레벨 구조에 속합니다. 구조; 세단은 동일한 제품군에 속하며, 2.4 배기량 해치백과 2.4 배기량 세단은 다른 제품군에 속합니다.
계층 구조와 제품군의 개념을 이해하면 팩토리 메소드 패턴과 추상 팩토리 패턴의 차이점을 이해할 수 있습니다. 팩토리의 제품이 모두 동일한 계층 구조에 속한다면 팩토리 메소드 패턴; 팩토리의 제품이 여러 계층 구조인 경우 추상 팩토리 패턴에 속합니다. 이 예에서 공장 모델이 2.0 배기량 해치백과 2.4 배기량 해치백을 제공하는 경우 공장 모델이 2.4 배기량 해치백과 2.4 배기량 세단이라는 두 가지 제품을 제공하는 경우 이 공장 패턴 이는 추상 팩토리 패턴입니다. 왜냐하면 이 패턴이 제공하는 제품은 두 개의 서로 다른 계층 구조에 속하기 때문입니다. 물론, 공장이 네 가지 모델 모두에 대해 제품을 제공하는 경우 제품은 두 가지 계층 구조에 속하기 때문에 분명히 추상 공장 모델에도 속합니다.
추상 팩토리 패턴의 장점
팩토리 메소드 패턴의 장점 외에 추상 팩토리 패턴의 가장 큰 장점은 클래스 내의 제품을 제어합니다. 소위 제품군은 일반적으로 어느 정도 특정 상관 관계를 가지고 있습니다. 추상 팩토리 패턴은 관리를 위해 새로운 클래스를 도입하지 않고도 클래스 내 제품군의 상관 관계를 정의하고 설명할 수 있습니다.
추상 팩토리 패턴의 단점
제품군 확장은 제품군에 새로운 제품을 추가해야 하는 경우 거의 힘든 작업입니다. all 모든 팩토리 클래스를 수정해야 합니다. 따라서 추상 팩토리 패턴을 사용할 때 제품 계층 구조를 나누는 것이 매우 중요합니다.
적용 가능한 시나리오
생성할 객체가 일련의 상호 연관되거나 상호 의존적인 제품군인 경우 추상 팩토리 패턴을 사용할 수 있습니다. 더 명확하게 설명하면 상속 시스템에서 여러 계층 구조(즉, 여러 추상 클래스가 있음)가 있고 각 계층 구조에 속하는 구현 클래스 간에 특정 연관이나 제약 조건이 있는 경우 다음을 사용할 수 있습니다. 추상 공장 패턴입니다. 각 계층 구조의 구현 클래스 간에 관계나 제약 조건이 없는 경우 여러 개의 독립 팩토리를 사용하여 제품을 만드는 것이 더 적절합니다.
요약
无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式,在形式和特点上也是极为相似的,他们的最终目的都是为了解耦。在使用时,我们不必去在意这个模式到底工厂方法模式还是抽象工厂模式,因为他们之间的演变常常是令人琢磨不透的。经常你会发现,明明使用的工厂方法模式,当新需求来临,稍加修改,加入了一个新方法后,由于类中的产品构成了不同等级结构中的产品族,它就变成抽象工厂模式了;而对于抽象工厂模式,当减少一个方法使的提供的产品不再构成产品族之后,它就演变成了工厂方法模式。
所以,在使用工厂模式时,只需要关心降低耦合度的目的是否达到了。
<?php /** * 抽象工厂模式 * ------------- * @author zhaoxuejie <zxj198468@gmail.com> * @package design pattern * @version v1.0 2011-12-14 */ //--------------------------------------------------------------------------- // 抽象工厂(AbstractFactory)角色:它声明一个创建抽象产品对象的接口。 // 通常以接口或抽象类实现,所有的具体工厂类必须实现这个接口或继承这个类。 //--------------------------------------------------------------------------- // 具体工厂(ConcreteFactory)角色:实现创建产品对象的操作。 // 客户端直接调用这个角色创建产品的实例。这个角色包含有选择合适的产品对象的逻辑。通常使用具体类实现。 //--------------------------------------------------------------------------- // 抽象产品(Abstract Product)角色:声明一类产品的接口。它是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。 //--------------------------------------------------------------------------- // 具体产品(Concrete Product)角色:实现抽象产品角色所定义的接口,定义一个将被相应的具体工厂创建的产品对象。 // 其内部包含了应用程序的业务逻辑。 //--------------------------------------------------------------------------- ///抽象工厂 interface AnimalFactory{ public function createCat(); public function createDog(); } //黑色动物具体工厂 class BlackAnimalFactory implements AnimalFactory{ function createCat(){ return new BlackCat(); } function createDog(){ return new BlackDog(); } } //白色动物具体工厂 class WhiteAnimalFactory implements AnimalFactory{ function createCat(){ return new WhiteCat(); } function createDog(){ return new WhiteDog(); } } //抽象产品 interface Cat{ function Voice(); } interface Dog{ function Voice(); } //具体产品 class BlackCat implements Cat { function Voice(){ echo '黑猫喵喵……'; } } class WhiteCat implements Cat { function Voice(){ echo '白猫喵喵……'; } } class BlackDog implements Dog { function Voice(){ echo '黑狗汪汪……'; } } class WhiteDog implements Dog { function Voice(){ echo '白狗汪汪……'; } } //客户端 class CLient{ public static function main(){ self::run(new BlackAnimalFactory()); self::run(new WhiteAnimalFactory()); } public static function run(AnimalFactory $AnimalFactory){ $cat=$AnimalFactory->createCat(); $cat->Voice(); $dog=$AnimalFactory->createDog(); $dog->Voice(); } } CLient::main();
更多php 开发模式之工厂模式相关文章请关注PHP中文网!

PHP는 동적 웹 개발 및 서버 측 응용 프로그램에 사용되는 서버 측 스크립팅 언어입니다. 1.PHP는 편집이 필요하지 않으며 빠른 발전에 적합한 해석 된 언어입니다. 2. PHP 코드는 HTML에 포함되어 웹 페이지를 쉽게 개발할 수 있습니다. 3. PHP는 서버 측 로직을 처리하고 HTML 출력을 생성하며 사용자 상호 작용 및 데이터 처리를 지원합니다. 4. PHP는 데이터베이스와 상호 작용하고 프로세스 양식 제출 및 서버 측 작업을 실행할 수 있습니다.

PHP는 지난 수십 년 동안 네트워크를 형성했으며 웹 개발에서 계속 중요한 역할을 할 것입니다. 1) PHP는 1994 년에 시작되었으며 MySQL과의 원활한 통합으로 인해 개발자에게 최초의 선택이되었습니다. 2) 핵심 기능에는 동적 컨텐츠 생성 및 데이터베이스와의 통합이 포함되며 웹 사이트를 실시간으로 업데이트하고 맞춤형 방식으로 표시 할 수 있습니다. 3) PHP의 광범위한 응용 및 생태계는 장기적인 영향을 미쳤지 만 버전 업데이트 및 보안 문제에 직면 해 있습니다. 4) PHP7의 출시와 같은 최근 몇 년간의 성능 향상을 통해 현대 언어와 경쟁 할 수 있습니다. 5) 앞으로 PHP는 컨테이너화 및 마이크로 서비스와 같은 새로운 도전을 다루어야하지만 유연성과 활발한 커뮤니티로 인해 적응력이 있습니다.

PHP의 핵심 이점에는 학습 용이성, 강력한 웹 개발 지원, 풍부한 라이브러리 및 프레임 워크, 고성능 및 확장 성, 크로스 플랫폼 호환성 및 비용 효율성이 포함됩니다. 1) 배우고 사용하기 쉽고 초보자에게 적합합니다. 2) 웹 서버와 우수한 통합 및 여러 데이터베이스를 지원합니다. 3) Laravel과 같은 강력한 프레임 워크가 있습니다. 4) 최적화를 통해 고성능을 달성 할 수 있습니다. 5) 여러 운영 체제 지원; 6) 개발 비용을 줄이기위한 오픈 소스.

PHP는 죽지 않았습니다. 1) PHP 커뮤니티는 성능 및 보안 문제를 적극적으로 해결하고 PHP7.x는 성능을 향상시킵니다. 2) PHP는 최신 웹 개발에 적합하며 대규모 웹 사이트에서 널리 사용됩니다. 3) PHP는 배우기 쉽고 서버가 잘 수행되지만 유형 시스템은 정적 언어만큼 엄격하지 않습니다. 4) PHP는 컨텐츠 관리 및 전자 상거래 분야에서 여전히 중요하며 생태계는 계속 발전하고 있습니다. 5) Opcache 및 APC를 통해 성능을 최적화하고 OOP 및 설계 패턴을 사용하여 코드 품질을 향상시킵니다.

PHP와 Python에는 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구 사항에 따라 다릅니다. 1) PHP는 웹 개발, 배우기 쉽고 풍부한 커뮤니티 리소스에 적합하지만 구문은 현대적이지 않으며 성능과 보안에주의를 기울여야합니다. 2) Python은 간결한 구문과 배우기 쉬운 데이터 과학 및 기계 학습에 적합하지만 실행 속도 및 메모리 관리에는 병목 현상이 있습니다.

PHP는 동적 웹 사이트를 구축하는 데 사용되며 해당 핵심 기능에는 다음이 포함됩니다. 1. 데이터베이스와 연결하여 동적 컨텐츠를 생성하고 웹 페이지를 실시간으로 생성합니다. 2. 사용자 상호 작용 및 양식 제출을 처리하고 입력을 확인하고 작업에 응답합니다. 3. 개인화 된 경험을 제공하기 위해 세션 및 사용자 인증을 관리합니다. 4. 성능을 최적화하고 모범 사례를 따라 웹 사이트 효율성 및 보안을 개선하십시오.

PHP는 MySQLI 및 PDO 확장 기능을 사용하여 데이터베이스 작업 및 서버 측 로직 프로세싱에서 상호 작용하고 세션 관리와 같은 기능을 통해 서버 측로 로직을 처리합니다. 1) MySQLI 또는 PDO를 사용하여 데이터베이스에 연결하고 SQL 쿼리를 실행하십시오. 2) 세션 관리 및 기타 기능을 통해 HTTP 요청 및 사용자 상태를 처리합니다. 3) 트랜잭션을 사용하여 데이터베이스 작업의 원자력을 보장하십시오. 4) SQL 주입 방지, 디버깅을 위해 예외 처리 및 폐쇄 연결을 사용하십시오. 5) 인덱싱 및 캐시를 통해 성능을 최적화하고, 읽을 수있는 코드를 작성하고, 오류 처리를 수행하십시오.

PHP에서 전처리 문과 PDO를 사용하면 SQL 주입 공격을 효과적으로 방지 할 수 있습니다. 1) PDO를 사용하여 데이터베이스에 연결하고 오류 모드를 설정하십시오. 2) 준비 방법을 통해 전처리 명세서를 작성하고 자리 표시자를 사용하여 데이터를 전달하고 방법을 실행하십시오. 3) 쿼리 결과를 처리하고 코드의 보안 및 성능을 보장합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
