PHP工厂模式的理解和总结
每次看设计模式都感觉很奇妙,看不同的文章会发现不同的理解。然而这些模式如果不去写 composer 包,框架,我们很少会用到。但是这种思路是很好的。因为容易忘记所以写下来以供参考。
工厂模式(工厂方法模式)
工厂模式,是由抽象的类决定的 所以的产品都要 去继承一个抽象的接口。每一个产品都有一个工厂。
// 有抽象的类来控制 工厂的生成的产品
interface people
{
public function sex();
}
// 具体产品的实现
class Women implements people
{
public function sex()
{
// TODO: Implement sex() method.
}
}
class Men implements people
{
public function sex()
{
// TODO: Implement sex() method.
}
}
class WomenFactory {
public function createSex()
{
return new Women();
}
}
class MenFactory{
public function createSex()
{
return new Men();
}
}
简单工厂
- 网上说法很多
不过我认为简单工厂模式就是把工厂生成出来的产品放在一个控制器中去调用,客户端需要什么直接告诉工厂,工厂来进行生产。但是
1.如果需要添加产品的话我们需要添加新的分支,违背了开闭原则。
2.如果需要修改莫个产品你需要修改工厂,修改另一个产品你还需要修改工厂违背了单一职责原则。
class Men
{
public function sex()
{
}
}
class WoMen
{
public function sex()
{
}
}
class PeopleFactory{
public function createSex($sex)
{
switch ($sex){
case 'men':
return new Men();
break;
case 'women':
return new Women();
break;
}
}
}
抽象工厂模式
抽象工厂模式 建立在工厂模式上 然后每一个工厂去继承一个抽象工厂接口,客户端只需要知道抽象工厂接口,无需关系它是那个工厂类,只需要把它当成抽象工厂接口使用即可,但是 如果抽象工厂接口需要添加一个新的功能会影响到所有的工厂。
interface people
{
public function sex();
}
class Women implements people
{
public function sex()
{
// TODO: Implement sex() method.
}
}
class Men implements people
{
public function sex()
{
// TODO: Implement sex() method.
}
}
interface Factory{
public function created();
}
class WomenFactory implements Factory{
public function created()
{
return new Women();
}
}
class MenFactory implements Factory{
public function created()
{
return new Men();
}
}
总结
工厂模式 最主要的就是 不需要考虑如何生成的。只关注与功能。
简单工厂模式-> 就是一个简单小的比如可能就少数功能需要,而且生成的产品很少。如果产品比较多,就需要考虑工厂模式了。当你建造了一个工厂后,让别人调用的时候,就需要考虑抽象工厂模式了。可能你的工厂只需要出一个产品,限购,那你就可以采用静态工厂模式。