工厂模式(描述语言PHP)

本文深入解析了工厂模式的三种形式:简单工厂、工厂方法和抽象工厂。简单工厂在工厂类中进行判断并创建产品;工厂方法定义创建对象的接口,由子类决定实例化哪类;抽象工厂提供一系列相关或依赖对象的创建接口。

工厂模式分为,简单工厂,工厂方法,抽象工厂

 

简单工厂:主要特点,在工厂类中做判断,来创造对应的产品。

 

<?php

/**
* 工厂模式,简单工厂模式
*
* 主要是在工厂中做判断,从而创造相应的产品
*
* 缺点,增加新类型时,需更改工厂类
* 违反了开放封闭原则(软件实体,类,模块,函数)可以扩展
*
*/
define("ONE",1);
define("TWO",2);
class FactoryOne{
public function create()
{

}
}
class FactoryTwo{
public function create()
{

}
}
class Factory{
public function __construct()
{

}

public function create_instance($type)
{
if($type == ONE){
return new FactoryOne();
}else if($type == TWO){
return new FactoryTwo();
}
}
}

工厂方法:主要特点,创建对象的接口,让子类决定实例化哪个类,使一个类的实例化延迟到子类。

<?php

/**
* 工厂模式,工厂方法模式
*
* 定义一个用于创建对象的接口
*
* Factory Method 使一个类的实例化延迟到子类
*
* 缺点:没增加一个产品,则需要增加一个工厂
*
*/
abstract class SingleCore
{
abstract public function create();

abstract public function show();
}

class SingleA extends SingleCore
{
public function create()
{
parent::create(); // TODO: Change the autogenerated stub
}

public function show()
{
return '工厂A';
}

}

class SingleB extends SingleCore
{
public function create()
{
parent::create(); // TODO: Change the autogenerated stub
}

public function show()
{
return '工厂B';
}
}

abstract class FactoryMethod
{
public function create_instance()
{

}
}

class FactoryMethodA extends FactoryMethod
{
public function create_instance()
{
return new SingleA();
}

}

class FactoryMethodB extends FactoryMethod
{

public function create_instance()
{
return new SingleB();
}
}

抽象工厂:主要特点,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

<?php

/**
* 工厂模式,抽象工厂
*
* 以往,简单工厂和工厂方法模式,局限于一类产品,有一个共同的基类
* 要为不同类提供一个对象创建的接口,那么就要使用抽象工厂了
*
*/
abstract class SignleCore
{
abstract public function show();
}

abstract class MuliteCore
{
abstract public function show();
}

class SignleA extends SignleCore
{
public function show()
{

}
}

class SignleB extends SignleCore
{
public function show()
{

}
}

class MuliteA extends MuliteCore
{
public function show()
{
// TODO: Implement show() method.
}
}

class MuliteB extends MuliteCore
{
public function show()
{
// TODO: Implement show() method.
}
}

abstract class AbstractFactory
{
abstract public function createSingle();
abstract public function createMulite();
}
class FactoryA extends AbstractFactory
{
public function createSingle()
{
// TODO: Implement createSingle() method.
return new SignleA();
}

public function createMulite()
{
// TODO: Implement createMulite() method.
return new MuliteA();
}

}

class FactoryB extends AbstractFactory
{
public function createSingle()
{
// TODO: Implement createSingle() method.
return new SingleB();
}

public function createMulite()
{
// TODO: Implement createMulite() method.
return new MuliteB();
}

}



转载于:https://www.cnblogs.com/wmzll/p/11090761.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值