<?php
/*
* 抽象工程
*
* 饭店系统 有两个产品族
* 咸的 salt
* 甜的 sweet
* */
//类别1
interface A {
public function a();
}
interface B {
public function b();
}
class ProductA1 implements A{
public function a(){
echo '产品族a1';
}
}
class ProductA2 implements A{
public function a(){
echo '产品族a2';
}
}
class ProductB1 implements B{
public function b(){
echo '产品族b1';
}
}
class ProductB2 implements B{
public function b(){
echo '产品族b2';
}
}
interface Factory {
public function createA();
public function createB();
}
class Factory1 implements Factory{
public function createA(){
return new ProductA1();
}
public function createB(){
return new ProductB1();
}
}
class Factory2 implements Factory{
public function createA(){
return new ProductA2();
}
public function createB(){
return new ProductB2();
}
}
//这样在具体使用中,实例化抽象工厂了,在调用工厂方法就可以得到具体的产品
/*
* 当遇到业务需要,需要生产别的产品时,
* 可以修改工厂的创建方法 比如 Factory1里的createA()
* 原本是创造产品族A1,需求需要要创造产品族A3
*
*
*
*
* 如下:
*/
class ProductA3 implements A{
public function a(){
echo '我是产品族A3产品';
}
}
/*
* 修改 Factory1 : createA
*
* class Factory1 implements Factory{
* public function createA(){
* return new ProductA3();
* }
* public function createB(){
* return new ProductB1();
* }
* }
* 这样修改 对系统整体上所有调用Factory1 : createA 会生产产品族A3 仅仅就修改了抽象工厂的CreateA方法。
* 这里就是使用抽象工厂的好处,工厂生产产品与产品生产过程相分离。
*/
转载于:https://www.cnblogs.com/Super-Man/p/4386139.html