抽象工厂模式

抽象工厂模式

抽象工厂模式与工厂方法模式最大的区别:抽象工厂中每个工厂可以创建多种类的产品;而工厂方法每个工厂只能创建一类
允许使用抽象的接口来创建一组相关产品,而不需要知道或关心实际生产出的具体产品是什么,这样就可以从具体产品中被解耦,解决了工厂模式的每个工厂只能创建一类产品
优点:降低耦合,抽象工厂模式将具体产品的创建延迟到具体工厂的子类中,这样将对象的创建封装起来,可以减少客户端与具体产品类之间的依赖,从而使系统耦合度低,这样更有利于后期的维护和扩展
更符合开-闭原则,新增一种产品类时,只需要增加相应的具体产品类和相应的工厂子类即可
符合单一职责原则,每个具体工厂类只负责创建对应的产品
不使用静态工厂方法,可以形成基于继承的等级结构
缺点:对于新的产品族符合开-闭原则;对于新的产品种类不符合开-闭原则,这一特性称为开-闭原则的倾斜性

//抽象工厂类
interface Factory{
    public function ManufactureContainer();
    public function ManufactureMould();
}
//抽象产品族
interface AbstractProduct{
    public function  Show();
}
//抽象产品类A
interface ContainerProduct extends AbstractProduct{
    public function  Show();
}

//抽象产品类B
interface MouldProduct extends AbstractProduct{
    public function Show();
}
//具体产品类
class ContainerProductA implements ContainerProduct{
    public function  Show(){
        echo '生产出容器A产品';
    }
}

class ContainerProductB implements ContainerProduct{
    public function  Show(){
        echo '生产出容器B产品';
    }
}
class MouldProductA implements MouldProduct{
    public function  Show(){
        echo '生产出磨具A产品';
    }
}
class MouldProductB implements MouldProduct{
    public function  Show(){
        echo '生产出磨具B产品';
    }
}
//具体工厂类
class FactoryA implements Factory{

    public function ManufactureContainer() {
        return new ContainerProductA();
    }

    public function ManufactureMould() {
        return new MouldProductA();
    }
}

//B厂 - 生产模具+容器产品
class FactoryB implements Factory{

    public function ManufactureContainer() {
        return new ContainerProductB();
    }

    public function ManufactureMould() {
        return new MouldProductB();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值