工厂适配器模式主要为了降低对象之间的耦合性。将创建对象的事情交给工厂统一去创建,使用者不必知道创建的具体细节。
工厂适配器模式主要有三种:简单工厂模式,工厂方法模式,抽象工厂模式。
简单工厂模式:就是创建一个工厂类,每当使用者需要调用对象时,就让工长代生产一个对象。(注:只有一个工厂类生产全部的对象)
- <?php
- /**
- * 车子系列
- *
- */
- abstract Class BWM{
- function __construct($pa) {
- }
- }
- Class BWM320 extends BWM{
- function __construct($pa) {
- }
- }
- Class BMW523 extends BWM{
- function __construc($pb){
- }
- }
- class Factory {
- static function createBMW($type){
- switch ($type) {
- case 320:
- return new BWM320();
- case 523:
- return new BMW523();
- //....
- }
- }
- class Customer {
- private $BMW;
- function getBMW($type){
- $this¬-> BMW = Factory::createBMW($type);
- }
- }
2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。
4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。
- 产品类:
- abstract Class BWM{
- function __construct($pa) {
- }
- }
- Class BWM320 extends BWM{
- function __construct($pa) {
- }
- }
- Class BMW523 extends BWM{
- function __construc($pb){
- }
- }
- /**
- * 创建工厂的接口
- *
- */
- interface FactoryBMW {
- function createBMW();
- }
- /**
- *
- * 创建BWM320车
- */
- class FactoryBWM320 implements FactoryBMW {
- function createBMW($type){
- return new BWM320();
- }
- }
- /**
- *
- * 创建BWM523车
- */
- class FactoryBWM523 implements FactoryBMW {
- function createBMW($type){
- return new BMW523();
- }
- }
- class Customer {
- private $BMW;
- function getBMW($type){
- switch ($type) {
- case 320:
- $BWM320 = new FactoryBWM320();
- return $BWM320->createBMW();
- case 523:
- $BWM523 = new FactoryBWM523();
- return $BWM320->createBMW();
- //....
- }
- }
- }
- class Customer {
- private $BMW;
- function getBMW($type){
- $class = new ReflectionClass('FactoryBWM' .$type );//建立 'FactoryBWM'这个类的反射类
- $instance = $class->newInstanceArgs();//相当于实例化'FactoryBWM' .$type类
- return $instance->createBMW();
- //或者直接
- /**
- * $instance = new 'FactoryBWM' .$type();
- * return $instance->createBMW();
- */
- }
- }
1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。
2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。
4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。
产品类:
- abstract class BWM{
- }
- class BWM523 extends BWM {
- }
- class BWM320 extends BWM {
- }
- /**
- * 空调
- *
- */
- abstract class aircondition{
- }
- class airconditionBWM320 extends aircondition {
- }
- class airconditionBWM52 extends aircondition {
- }
- /**
- * 创建工厂的接口
- *
- */
- interface FactoryBMW {
- function createBMW();
- function createAirC();
- }
- /**
- *
- * 创建BWM320车
- */
- class FactoryBWM320 implements FactoryBMW {
- function createBMW(){
- return new BWM320();
- }
- function createAirC(){ //空调
- return new airconditionBWM320();
- }
- }
- /**
- *
- * 创建BWM523车
- */
- class FactoryBWM523 implements FactoryBMW {
- function createBMW(){
- return new BWM523();
- }
- function createAirC(){
- return new airconditionBWM523();
- }
- }
- 客户类
- class Customer {
- private $BMW;
- private $airC;
- function getBMW($type){
- $class = new ReflectionClass('FactoryBWM' .$type );
- $instance = $class->newInstanceArgs();
- $this->BMW = $instance->createBMW();
- $this->airC = $instance->createAirC();
- }
- }