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

PHP Design Pattern - Simple Factory_PHP Tutorial

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

PHP Design Pattern - Simple Factory

The first two sections introduce what design patterns are and the six major principles. I believe that after reading the first two sections, everyone has a preliminary understanding of design patterns. Next, let’s talk about the classification of design patterns.

Object-oriented design patterns are generally divided into three categories: creational, structural, and behavioral.

Creation type: When creating an object, we no longer instantiate the object directly; instead, the program determines how to create the object based on specific scenarios, thus ensuring greater performance and better architectural advantages. Creation patterns mainly include simple factory pattern (not one of the 23 design patterns), factory method, abstract factory pattern, singleton pattern, generator pattern, and prototype pattern.

Structural: Used to help organize multiple objects into larger structures. Structural patterns mainly include adapter mode, bridge mode, combinator mode, decorator mode, facade mode, Hengyuan mode and proxy mode.

Behavioral: Used to help communicate between objects in the system and how to control processes in complex systems. Behavioral patterns mainly include command mode, interpreter mode, iterator mode, mediator mode, memo mode, observer mode, state mode, strategy mode, template mode, visitor mode and chain of responsibility mode.

Today we mainly introduce the first simple factory pattern of creation.

Note: When reading this series of blogs, you must have a basic understanding of UML class diagrams and object-oriented PHP programming.

The simple factory pattern is not one of the 23 commonly used object-oriented design patterns. The simple factory pattern uses a factory object to decide which product class instance to create. The simple factory pattern is the simplest and most practical pattern in the factory pattern family and can be understood as a special implementation of different factory patterns. Its essence is that a factory class dynamically determines which instance of the product class (these product classes inherit from a parent class or interface) should be created based on the incoming parameters.

Roles and Responsibilities:

Factory (SimpleFactory) role: The core of the simple factory pattern, it is responsible for implementing the internal logic of creating all instances. The factory class can be called directly by the outside world to create the required product objects.

Abstract product (IProduct) role: The parent class of all objects created by the simple factory pattern. It is responsible for describing the public interface common to all instances.

Concrete Product role: It is the creation target of the simple factory pattern. All objects created are instances of a specific class that plays this role.

Requirements: Create product objects with corresponding characteristics by a simple factory based on providing corresponding attribute values.

Now write the following PHP code based on the above UML class diagram.

<!--?php
/**
 * Created by PhpStorm.
 * User: Jiang
 * Date: 2015/4/9
 * Time: 21:48
 */

/**抽象产品角色
 * Interface IProduct   产品接口
 */
interface IProduct
{
    /**X轴旋转
     * @return mixed
     */
    function XRotate();

    /**Y轴旋转
     * @return mixed
     */
    function YRotate();
}

/**具体产品角色
 * Class XProduct        X轴旋转产品
 */
class XProduct implements IProduct
{
    private $xMax=1;
    private $yMax=1;

    function __construct($xMax,$yMax)
    {
        $this--->xMax=$xMax;
        $this->yMax=1;
    }

    function XRotate()
    {
        echo 您好,我是X轴旋转产品,X轴转转转。。。。。。;
    }

    function YRotate()
    {
        echo 抱歉,我是X轴旋转产品,我没有Y轴。。。。。。;
    }
}

/**具体产品角色
 * Class YProduct        Y轴旋转产品
 */
class YProduct implements IProduct
{
    private $xMax=1;
    private $yMax=1;

    function __construct($xMax,$yMax)
    {
        $this->xMax=1;
        $this->yMax=$yMax;
    }

    function XRotate()
    {
        echo 抱歉,我是Y轴旋转产品,我没有X轴。。。。。。;
    }

    function YRotate()
    {
        echo 您好,我是Y轴旋转产品,Y轴转转转。。。。。。;
    }
}

/**具体产品角色
 * Class XYProduct        XY轴都可旋转产品
 */
class XYProduct implements IProduct
{
    private $xMax=1;
    private $yMax=1;

    function __construct($xMax,$yMax)
    {
        $this->xMax=$xMax;
        $this->yMax=$yMax;
    }

    function XRotate()
    {
        echo 您好,我是XY轴都可旋转产品,X轴转转转。。。。。。;
    }

    function YRotate()
    {
        echo 您好,我是XY轴都可旋转产品,Y轴转转转。。。。。。;
    }
}

/**工厂角色
 * Class ProductFactory
 */
class ProductFactory
{
    static function GetInstance($xMax,$yMax)
    {
        if($xMax>1 && $yMax===1)
        {
            return new XProduct($xMax,$yMax);
        }
        elseif($xMax===1 && $yMax>1)
        {
            return new YProduct($xMax,$yMax);
        }
        elseif($xMax>1 && $yMax>1)
        {
            return new XYProduct($xMax,$yMax);
        }
        else
        {
            return null;
        }
    }
}

Copy after login

Test code:

<!--?php
/**
 * Created by PhpStorm.
 * User: Jiang
 * Date: 2015/4/9
 * Time: 21:54
 */
require_once ./SimpleFactory/SimpleFactory.php;

header(Content-Type:text/html;charset=utf-8);

$pro=array();
$pro[]=ProductFactory::GetInstance(1,12);
$pro[]=ProductFactory::GetInstance(12,1);
$pro[]=ProductFactory::GetInstance(12,12);
$pro[]=ProductFactory::GetInstance(0,12);

foreach($pro as $v)
{
    if($v)
    {
        echo <br/-->;
        $v->XRotate();
        echo 
;
        $v->YRotate();
    }
    else
    {
        echo 非法产品!
;
    }
    echo 
Copy after login

; }
Using a browser to access the test code, we can find that the created objects are YProduct, XProduct, XYProduct, and null in order. The core code of the simple factory lies in the role of the factory (ProductFactory). Here, different objects are created based on the incoming xMax and yMax values. This is the essence of the simple factory, and we do not know the specific product class at all when we call the client during the test. What does it look like? This achieves the separation of calling and creation.

Advantages of a simple factory: It separates the caller of the object from the object creation process. When the caller of the object needs an object, he can directly request it from the factory. This avoids the coupling of the caller of the object and the implementation class of the object in a hard-coded manner, thereby improving the maintainability and scalability of the system.

Disadvantages of simple factories: When the product is modified, the factory class must also be modified accordingly. For example, if you want to add an operation class, such as finding the Nth power of M number, you have to change the case and modify the original class, which violates The open-closed principle.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/981961.htmlTechArticlePHP Design Pattern - Simple Factory The previous two sections introduced what design patterns are and the six principles. I believe you will read them. After finishing the first two sections, everyone has a preliminary understanding of design patterns. Let’s continue...
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

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

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.

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.

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).

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.

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.

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.

See all articles