Table of Contents
PHP Design Pattern - Abstract Factory
Home Backend Development PHP Tutorial PHP Design Pattern - Abstract Factory_PHP Tutorial

PHP Design Pattern - Abstract Factory_PHP Tutorial

Jul 13, 2016 am 09:56 AM
factory Design Patterns

PHP Design Pattern - Abstract Factory

Earlier we introduced the simple factory and factory method design patterns. Today we learn the last factory - abstract factory.

Case: Treating a girl to a meal is indispensable. When going to McDonald's, just say "two B sets" to the waiter. McDonald's is the AbstractFactory of Package B. Package B contains burgers, chicken wings and drinks. McDonald's or KFC will have the burger Factory, chicken wings factory and beverage factory produce materials corresponding to Package B according to the specifications of Package B.

Abstract Factory Pattern: Provides an interface for creating a series of related or interdependent objects without specifying their concrete classes. Client classes and factory classes are separated. Whenever a consumer needs a certain set of products, he or she only needs to request it from the abstract factory. The abstract factory will then produce products that meet the product set specifications to the specific factory.

UML class diagram implementation:

UML class diagram code implementation:

<!--?php
/**
 * Created by PhpStorm.
 * User: LYL
 * Date: 2015/4/19
 * Time: 17:39
 */

//-----------------------产品------------------------

/**抽象产品角色             充饥食物
 * Interface IAllayFood
 */
interface IAllayFood
{
    function Allay();
}

/**抽象产品角色            解渴食物
 * Interface IDrinkFood
 */
interface IDrinkFood
{
    function Drink();
}

/**具体产品角色           虾仁汉堡
 * Class XiaRenHamb
 */
class XiaRenHamb implements IAllayFood
{
    function Allay()
    {
        echo 虾仁汉堡充饥了。。。。。。。<br/-->;
    }
}

/**具体产品角色            鸡肉汉堡
 * Class ChickenHamb
 */
class ChickenHamb implements IAllayFood
{
    function Allay()
    {
        echo 鸡肉汉堡充饥了。。。。。。。
;
    }
}

/**具体产品角色             可口可乐
 * Class KekouKele
 */
class KekouKele implements IDrinkFood
{

    function Drink()
    {
        echo 可口可乐解渴了。。。。。。。。。
;
    }
}

/**具体产品角色             百事可乐
 * Class BaishiKele
 */
class BaishiKele implements IDrinkFood
{

    function Drink()
    {
        echo 百事可乐解渴了。。。。。。。。
;
    }
}

//-------------------抽象工厂---------------------

/**顶层超级抽象工厂接口
 * Interface IFactory
 */
interface IFactory
{
    //得到充饥食物
    function GetAllayFood();
    //得到解渴食物
    function GetDrinkFood();
}

/**工厂A              A套餐:虾仁汉堡+百事可乐
 * Class IAFactory
 */
class AFactory implements IFactory
{

    function GetAllayFood()
    {
        return new XiaRenHamb();
    }

    function GetDrinkFood()
    {
        return new BaishiKele();
    }
}

/**工厂B                B套餐:鸡肉汉堡+可口可乐
 * Class IBFactory
 */
class BFactory implements IFactory
{

    function GetAllayFood()
    {
        return new ChickenHamb();
    }

    function GetDrinkFood()
    {
        return new KekouKele();
    }
}
Copy after login

Client test code

header(Content-Type:text/html;charset=utf-8);
//------------------------抽象工厂测试代码------------------
require_once ./AbstractFactory/AbstractFactory.php;

//------------------点套餐-------------
$factoryA=new AFactory();
$factoryB=new BFactory();

//------------------麦当劳制作套餐食物------------
//A套餐
$allayA=$factoryA->GetAllayFood();
$drinkA=$factoryA->GetDrinkFood();

//B套餐
$allayB=$factoryB->GetAllayFood();
$drinkB=$factoryB->GetDrinkFood();

//-------------------享受套餐---------------
echo 享受A套餐:
;
$allayA->Allay();
$drinkA->Drink();

echo 享受B套餐:
;
$allayB->Allay();
$drinkB->Drink();
Copy after login

When each abstract product has more than one concrete subclass, how does the factory role know which subclass to instantiate? For example, each abstract product role has two concrete products. The abstract factory pattern provides two specific factory roles, corresponding to these two specific product roles. Each specific factory role is only responsible for the instantiation of a certain product role. Each concrete factory class is only responsible for creating instances of a specific subclass of the abstract product.

Applicable scenarios:

1. Multi-style series of scenes (packages) in game development, such as roads (interfaces), houses, pipes, etc.

2. The system needs to run on three different platforms, such as Windows, Linux, and Android. How will you design it? The abstract factory pattern is used to shield the impact of the operating system on the application. The software functions, application logic, and UI on the three different operating systems should be very similar. The only difference is that different factory methods are called and different product classes handle the information that interacts with the operating system.

3. When the objects that need to be created are a series of interrelated or interdependent product families, the abstract factory pattern can be used.


Summary of the three factory models:

1. The three types are very similar in form and characteristics, and the ultimate goal is decoupling. Encapsulate the object creation process so that the client can get the object directly without having to worry about how to create the object.

2. Comparison

Factory method pattern: used to create complex objects. (A la carte food)

Abstract Factory Pattern: used to create a set of related or interdependent complex objects. (Buy a set meal)

Factory method creation generally has only one method to create a product. Abstract factories generally have multiple methods to create a series of products.

We don’t have to worry about whether the pattern is the factory method pattern or the abstract factory pattern, because the evolution between them is often confusing. The factory method pattern is obviously used. When new requirements come, it is slightly modified and a new method is added. Since the products in the class constitute product families in different hierarchical structures, it becomes the abstract factory pattern, and for abstraction Factory pattern, when one method is reduced so that the provided products no longer constitute a product family, it evolves into the factory method pattern.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/987357.htmlTechArticlePHP Design Pattern - Abstract Factory Earlier we introduced the simple factory and factory method design patterns, today we learn the last one Factory Abstract Factory. Case: When chasing a girl, you must treat her to dinner...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

The difference between design patterns and architectural patterns in Java framework The difference between design patterns and architectural patterns in Java framework Jun 02, 2024 pm 12:59 PM

In the Java framework, the difference between design patterns and architectural patterns is that design patterns define abstract solutions to common problems in software design, focusing on the interaction between classes and objects, such as factory patterns. Architectural patterns define the relationship between system structures and modules, focusing on the organization and interaction of system components, such as layered architecture.

The wonderful use of the adapter pattern in Java design patterns The wonderful use of the adapter pattern in Java design patterns May 09, 2024 pm 12:54 PM

The Adapter pattern is a structural design pattern that allows incompatible objects to work together. It converts one interface into another so that the objects can interact smoothly. The object adapter implements the adapter pattern by creating an adapter object containing the adapted object and implementing the target interface. In a practical case, through the adapter mode, the client (such as MediaPlayer) can play advanced format media (such as VLC), although it itself only supports ordinary media formats (such as MP3).

Analysis of the Decorator Pattern in Java Design Patterns Analysis of the Decorator Pattern in Java Design Patterns May 09, 2024 pm 03:12 PM

The decorator pattern is a structural design pattern that allows dynamic addition of object functionality without modifying the original class. It is implemented through the collaboration of abstract components, concrete components, abstract decorators and concrete decorators, and can flexibly expand class functions to meet changing needs. In this example, milk and mocha decorators are added to Espresso for a total price of $2.29, demonstrating the power of the decorator pattern in dynamically modifying the behavior of objects.

PHP design pattern practical case analysis PHP design pattern practical case analysis May 08, 2024 am 08:09 AM

1. Factory pattern: Separate object creation and business logic, and create objects of specified types through factory classes. 2. Observer pattern: allows subject objects to notify observer objects of their state changes, achieving loose coupling and observer pattern.

How design patterns deal with code maintenance challenges How design patterns deal with code maintenance challenges May 09, 2024 pm 12:45 PM

Design patterns solve code maintenance challenges by providing reusable and extensible solutions: Observer Pattern: Allows objects to subscribe to events and receive notifications when they occur. Factory Pattern: Provides a centralized way to create objects without relying on concrete classes. Singleton pattern: ensures that a class has only one instance, which is used to create globally accessible objects.

What are the advantages and disadvantages of using design patterns in java framework? What are the advantages and disadvantages of using design patterns in java framework? Jun 01, 2024 pm 02:13 PM

The advantages of using design patterns in Java frameworks include: enhanced code readability, maintainability, and scalability. Disadvantages include complexity, performance overhead, and steep learning curve due to overuse. Practical case: Proxy mode is used to lazy load objects. Use design patterns wisely to take advantage of their advantages and minimize their disadvantages.

Application of design patterns in Guice framework Application of design patterns in Guice framework Jun 02, 2024 pm 10:49 PM

The Guice framework applies a number of design patterns, including: Singleton pattern: ensuring that a class has only one instance through the @Singleton annotation. Factory method pattern: Create a factory method through the @Provides annotation and obtain the object instance during dependency injection. Strategy mode: Encapsulate the algorithm into different strategy classes and specify the specific strategy through the @Named annotation.

PHP Design Patterns: Test Driven Development in Practice PHP Design Patterns: Test Driven Development in Practice Jun 03, 2024 pm 02:14 PM

TDD is used to write high-quality PHP code. The steps include: writing test cases, describing the expected functionality and making them fail. Write code so that only the test cases pass without excessive optimization or detailed design. After the test cases pass, optimize and refactor the code to improve readability, maintainability, and scalability.

See all articles