美文网首页
php抽象工厂模式

php抽象工厂模式

作者: 一路向后 | 来源:发表于2021-03-16 20:57 被阅读0次

1.抽象工厂模式简介

   抽象工厂是工厂方法的升级版,为相关或者相互依赖的对象提供一个接口,而且无效指定他们的具体实现类。

2.源码实现

<?php

/*抽象产品A*/
interface AbstractProductA {
    public function getName();
}

/*抽象产品B*/
interface AbstractProductB {
    public function getName();
}

/*具体产品A1*/
class ProductA1 implements AbstractProductA {
    private $_name;

    public function __construct()
    {
        $this->_name = 'Product A1';
    }

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

/*具体产品A2*/
class ProductA2 implements AbstractProductA {
    private $_name;

    public function __construct()
    {
        $this->_name = 'Product A2';
    }

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

/*具体产品B1*/
class ProductB1 implements AbstractProductB {
    private $_name;

    public function __construct()
    {
        $this->_name = 'Product B1';
    }

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

/*具体产品B2*/
class ProductB2 implements AbstractProductB {
    private $_name;

    public function __construct()
    {
        $this->_name = 'Product B2';
    }

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

/*抽象工厂*/
interface AbstractFactory {
    public function createProductA();
    public function createProductB();
}

/*具体工厂1*/
class ConcreteFactory1 implements AbstractFactory {
    public function createProductA()
    {
        return new ProductA1();
    }

    public function createProductB()
    {
        return new ProductB1();
    }
}

/*具体工厂2*/
class ConcreteFactory2 implements AbstractFactory {
    public function createProductA()
    {
        return new ProductA2();
    }

    public function createProductB()
    {
        return new ProductB2();
    }
}

/*客户端*/
class Client {
    public static function main()
    {
        self::run(new ConcreteFactory1());
        self::run(new ConcreteFactory2());
    }

    public static function run(AbstractFactory $factory)
    {
        $productA = $factory->createProductA();
        $productB = $factory->createProductB();

        echo $productA->getName()."\n";
        echo $productB->getName()."\n";
    }
}

Client::main();

?>

3.运行及其结果

$ php example.php
Product A1
Product B1
Product A2
Product B2

相关文章

  • PHP 完整实战23种设计模式

    PHP实战创建型模式 单例模式 工厂模式 抽象工厂模式 原型模式 建造者模式 PHP实战结构型模式 桥接模式 享元...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式

    php关键字 1.工厂模式分类 工厂模式具体可分为三类模式:简单工厂模式,工厂方法模式,抽象工厂模式; 1.1. ...

  • php抽象工厂模式

    1.抽象工厂模式简介    抽象工厂是工厂方法的升级版,为相关或者相互依赖的对象提供一个接口,而且无效指定他们的具...

  • PHP完整实战23种设计模式

    前言 设计模式是面向对象的最佳实践 实战 PHP实战创建型模式 单例模式 工厂模式 抽象工厂模式 原型模式 建造者...

  • 抽象工厂模式(选择产品簇)

    目录 回顾众多工厂模式 抽象工厂模式的理念 抽象工厂模式与工厂方法模式的差异 怎么来实现抽象工厂模式 抽象工厂模式...

  • PHP工厂模式之抽象工厂模式

    抽象工厂模式中主要角色 抽象工厂(Abstract Factory)角色:它声明一个创建抽象产品对象的接口。通常以...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 【抽象工厂模式】Abstract Factory Design

    抽象工厂模式 抽象工厂模式是**Creational **模式之一 抽象工厂模式和工厂模式很相似,甚至可以说抽象工...

  • 第3章 创建型模式-抽象工厂模式

    ■ 抽象工厂模式的优点 ■ 抽象工厂模式的缺点 ■ 抽象工厂模式的使用场景 ■ 抽象工厂 AbstractFact...

网友评论

      本文标题:php抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/rohjcltx.html