首页 > 其他 > 详细

抽象工厂模式 具体工厂接口 具体工厂

时间:2015-11-24 12:26:26      阅读:293      评论:0      收藏:0      [点我收藏+]
<?php
/************************具体物品和状态*******************************/
//四个产品类

//点中自己的物体时的鼠标
class mineMouse
{
    //鼠标的颜色
    public $color = "green";
}

//点中敌人的物体时的鼠标
class enemyMouse
{
    //鼠标的颜色
    public $color = ‘red‘;
}

//点中盟友的物体时的鼠标
class mengMouse
{
    //鼠标的颜色
    public $color = ‘blue‘;
}

//自己的运输船状态
class mineDropship
{
    //显示装载的情况,假设2辆坦克
    public $loading = ‘2 tanks‘;
}

//敌人的运输船状态
class enemyDropship
{
    //不显示装载的情况
    public $loading = ‘不对你显示有啥!‘;
}

//盟友的运输船状态
class mengDropship
{
    //只显示空载还是有物理装备
    public $loading ="有武器装备!";
}

/*******************************抽象工厂 具体工厂接口 具体工厂*******************************/
//主工厂类,也叫抽象工厂类
class abstractCreator
{
    //根据参数分配工作到具体的工厂,并返回具体工厂对象
    public function getCreator($belong)
    {
        //获取具体工厂的类名
        $creatorClassName = $belong.‘Creator‘;
        //返回具体工厂对象
        return new $creatorClassName();
    }
}

//具体工厂必须执行的接口
interface productCreator
{
    //制造方法,或者说根据参数返回产品(鼠标,运输船)的方法
    public function creatProduct($productName);

}

//制造属于自己的物体的具体工厂,执行接口
class mineCreator implements productCreator
{
    //根据参数生产并返回属于自己的产品
    public function creatProduct($productName)
    {
        //获取产品的类名
        $productClassName = ‘mine‘.$productName;
        //返回产品对象
        return new $productClassName;
    }

}

//制造属于敌人的物体的具体工厂,执行接口
class enemyCreator implements productCreator
{
    //根据参数生产并返回属于敌人的产品
    public function creatProduct($productName)
    {
        //获取产品的类名
        $productClassName = ‘enemy‘.$productName;
        //返回产品对象
        return new $productClassName;
    }
}

//制造属于盟友的物体的具体工厂,执行接口
class mengCreator implements productCreator
{
    //根据参数生产并返回属于敌人的产品
    public function creatProduct($productName)
    {
        //获取产品的类名
        $productClassName = ‘meng‘.$productName;
        //返回产品对象
        return new $productClassName;
    }
}

/************************测试*******************************/
//开始操作
//新建抽象工厂对象
$abstractCreator = new abstractCreator();
//根据归属,得到具体工厂对象,这里先演示敌人的
$realCreator1 = $abstractCreator->getCreator(‘enemy‘);
//让具体工厂对象生产鼠标对象
$product1 = $realCreator1->creatProduct(‘Mouse‘);
//让鼠标对象显示颜色,显示结果red
echo $product1->color;

echo "<hr>";

//根据归属,得到另一个具体工厂对象,这里演示自己的
$realCreator2 = $abstractCreator->getCreator(‘mine‘);
//让具体工厂对象生产运输船
$product2 = $realCreator2->creatProduct(‘Dropship‘);
//让运输船对象显示装载对象,显示结果2 tanks,两辆坦克
echo $product2->loading;

echo "<h1>盟友运输船</h1>";
$realCreator3 = $abstractCreator->getCreator(‘meng‘);
$product3 = $realCreator3->creatProduct(‘Dropship‘);
echo $product3->loading;

echo "<h1>点击盟友时候的鼠标</h1>";
$realCreator3 = $abstractCreator->getCreator(‘meng‘);
$product3 = $realCreator3->creatProduct(‘Mouse‘);
echo $product3->color;

?>

 

抽象工厂模式 具体工厂接口 具体工厂

原文:http://www.cnblogs.com/jiufen/p/4991107.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!