<?php
/**
* 抽象工厂模式
*/
/************************ 鼠标 *************************/
interface Mouse
{
public function make();
}
//戴尔鼠标
class DellMouse implements Mouse
{
public function make()
{
echo "Dell mouse\n";
}
}
//惠普鼠标
class HpMouse implements Mouse
{
public function make()
{
echo "Hp mouse \n";
}
}
/************* 键盘 ******************************/
interface Keyboard {
public function make();
}
//惠普键盘
class HpKeyboard implements Keyboard
{
public function make()
{
echo "惠普键盘 \n";
}
}
//戴尔键盘
class DellKeyboard implements Keyboard
{
public function make()
{
echo "惠普键盘 \n";
}
}
/********************** 工厂 ******************************/
interface PcFactor
{
//制造鼠标
public function createMouse();
//制造键盘
public function createKeyboard();
//制造摄像头
public function createCamera();
}
//戴尔工厂
class DellFactor implements PcFactor
{
//戴尔鼠标对象
public function createMouse()
{
return new DellMouse();
}
//戴尔键盘对象
public function createKeyboard()
{
return new DellKeyboard();
}
//戴尔摄像头
public function createCamera()
{
return new DellCamera();
}
}
//惠普工厂
class HpFactor implements PcFactor
{
public function createMouse()
{
return new HpMouse();
}
public function createKeyboard()
{
return new HpKeyboard();
}
public function createCamera()
{
return new HpCamera();
}
}
/********************* test ***************/
//制作戴尔鼠标和键盘
$dellFactor = new DellFactor();
$dellFactor->createMouse()->make();
$dellFactor->createKeyboard()->make();
//制作惠普鼠标和键盘
$hpFactor = new HpFactor();
$hpFactor->createMouse()->make();
$hpFactor->createKeyboard()->make();
// ? 增加一个产品 摄像头
/******************* 摄像头 *********************/
//摄像头接口类
interface Camera
{
public function make();
}
//戴尔摄像头
class DellCamera implements Camera
{
public function make()
{
echo "戴尔摄像头\n";
}
}
//惠普摄像头
class HpCamera implements Camera
{
public function make()
{
echo "惠普摄像头\n";
}
}
//戴尔工厂 和惠普工厂 也要增加 制作摄像头的方法
//制造戴尔摄像头
$dellFactor->createCamera()->make();
//执照惠普摄像头
$hpFactor->createCamera()->make();
// ? 如果增加一个品牌呢 华为
//华为鼠标
class HuaweiMouse implements Mouse
{
public function make()
{
echo "华为鼠标 \n";
}
}
//华为键盘
class HuaweiKeyboard implements Keyboard
{
public function make()
{
echo "华为键盘 \n";
}
}
//华为摄像头
class HuaweiKeyCamera implements Camera
{
public function make()
{
echo "华为摄像头 \n";
}
}
//华为工厂
class HuaweiFactor implements PcFactor
{
//华为鼠标
public function createMouse()
{
return new HuaweiMouse();
}
//华为键盘
public function createKeyboard()
{
return new HuaweiKeyboard();
}
//华为摄像头
public function createCamera()
{
return new HuaweiKeyCamera();
}
}
//调用
$huaweiFactor = new HuaweiFactor();
//制作华为鼠标
$huaweiFactor->createMouse()->make();
//制造华为键盘
$huaweiFactor->createKeyboard()->make();
//制造华为摄像头
$huaweiFactor->createCamera()->make();