设计模式--抽象工厂模式

本文介绍了抽象工厂模式,它是简单工厂模式的扩展,通过汽车和服装工厂的抽象,展示了如何创建不同等级结构的产品。示例代码中实现了奔驰、宝马、李宁和安踏等具体产品的创建,客户端通过抽象工厂接口调用相应方法获取产品。

记得前面写过一篇简单工厂模式,那个是只针对一类产品的抽象,比如数据库一类的抽象;今天讲的是简单工厂模式的升级版!--抽象工厂模式。

抽象工厂模式其实就是简单工厂模式的一个再一次的抽象而已;这次把比如:汽车工厂和衣服工厂再进行一次抽象,就是抽象工厂模式了!

<?php
/**
 * 汽车工厂类
 */
interface AbstractProductCart {

    /**
     * 取得产品名
     */
    public function getName();
}


/**
 * 服装工厂类
 */
interface AbstractProductFuZhuang{

    /**
     * 取得产品名
     */
    public function getName();
}


/**
 * 汽车工厂类 之 奔驰类
 */
class BenChi implements AbstractProductCart {
    private $_name;

    public function __construct() {
        $this->_name = '奔驰';
    }

    public function getName() {
        return $this->_name;
    }
}


/**
 * 汽车工厂类 之 宝马类
 */
class BaoMa implements AbstractProductCart{
    private $_name;

    public function __construct() {
        $this->_name = '宝马';
    }

    public function getName() {
        return $this->_name;
    }
}


/**
 * 服装工厂类 之 李宁类
 */
class LiNing implements AbstractProductFuZhuang {
    private $_name;

    public function __construct() {
        $this->_name = '李宁';
    }

    public function getName() {
        return $this->_name;
    }
}

/**
 * 服装工厂类 之 安踏
 */
class AnTa implements AbstractProductFuZhuang {
    private $_name;

    public function __construct() {
        $this->_name = '安踏'
    }

    public function getName() {
        return $this->_name;
    }
}


/**
 * 抽象工厂
 */
interface AbstractFactory {
    /**
     * 创建等级结构为 (奔驰、李宁....) 的产品的工厂方法
     */
    public function createProductA();

    /**
     * 创建等级结构为 (宝马、安踏.....) 的产品的工厂方法
     */
    public function createProductB();

}


/**
 * 具体 汽车 工厂 
 */
class ConcreteFactory implements AbstractFactory{

    //制作奔驰
    public function createProductA() {
        return new BenChi();
    }
    
    //制作宝马
    public function createProductB() {
        return new BaoMa();
    }
}


/**
 * 具体 服装 工厂
 */
class ConcreteFactory2 implements AbstractFactory{

    //制作李宁
    public function createProductA() {
        return new LiNing();
    }

    //制作安踏
    public function createProductB() {
        return new AnTa();
    }
}






/**
 * 客户端
 */
class Client {

    /**
     * 跑 汽车工厂 和 服装工厂
     */
    public static function main() {
        self::run(new ConcreteFactory1());
        self::run(new ConcreteFactory2());
    }

    /**
     * 调用工厂实例生成产品,输出产品名
     * @param $factory AbstractFactory 工厂实例
     */
    public static function run(AbstractFactory $factory) {
        $productA = $factory->createProductA();
        $productB = $factory->createProductB();
        echo $productA->getName(), '<br />';
        echo $productB->getName(), '<br />';
    }

}

Client::main();//打印数据  奔驰 宝马 李宁 安踏

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值