Home Backend Development PHP Tutorial Learn PHP design patterns PHP implement template method pattern_php skills

Learn PHP design patterns PHP implement template method pattern_php skills

May 16, 2016 pm 08:03 PM
php template method pattern Design Patterns

1. Intention
Define the skeleton of an algorithm in one operation, deferring some steps to subclasses. Template Method allows subclasses to redefine certain specific steps of an algorithm without changing the structure of the algorithm [GOF95]
2. Template method pattern structure diagram

3. Main roles in the template method pattern
Abstract template (AbstractClass) role: Define one or more abstract methods for subclasses to implement. These abstract methods are called basic operations, and they are components of top-level logic.
Define a template method. This template method is generally a concrete method, which gives the skeleton of the top-level logic, and the logical composition steps are in the corresponding abstract operations, and these operations will be postponed to subclasses. At the same time, the top-level logic can also call specific implementation methods

Concrete template (ConcrteClass) role: Implement one or more abstract methods of the parent class and exist as a component of top-level logic.

Each abstract template can have multiple concrete templates corresponding to it, and each concrete template has its own implementation of abstract methods (that is, components of top-level logic), making the implementation of top-level logic different.
4. Applicable scenarios of template method mode
1. Implement the immutable part of an algorithm at once and leave the variable behavior to subclasses.
2. Common behaviors in each subclass should be extracted and concentrated into a common parent class to avoid code duplication.
3. Control subclass expansion.
5. Template method pattern and other patterns
1. Strategy mode: The template method uses inheritance to change parts of the algorithm, and the strategy mode uses delegation to change the entire algorithm. The difference is that the closure changes differently, one part changes and the other changes the whole.
2. Factory method pattern (factory method pattern): Factory Method pattern is often called by template methods.
6. Template method pattern PHP example

<&#63;php
/**
 * 抽象模板角色
 * 定义抽象方法作为顶层逻辑的组成部分,由子类实现
 * 定义模板方法作为顶层逻辑的架子,调用基本方法组装顶层逻辑
 */
abstract class AbstractClass {
 
  /**
   * 模板方法 调用基本方法组装顶层逻辑
   */
  public function templateMethod() {
    echo 'templateMethod begin.<br />';
    $this->primitiveOperation1();
    $this->primitiveOperation2();
    echo 'templateMethod end.<br />';
  }
 
  /**
   * 基本方法1
   */
  abstract protected function primitiveOperation1();
 
   /**
   * 基本方法2
   */
  abstract protected function primitiveOperation2();
}
 
/**
 * 具体模板角色
 * 实现父类的抽象方法
 */
class ConcreteClass extends AbstractClass{
  /**
   * 基本方法1
   */
  protected function primitiveOperation1() {
    echo 'primitiveOperation1<br />';
  }
 
   /**
   * 基本方法2
   */
  protected function primitiveOperation2(){
    echo 'primitiveOperation2<br />';
  }
 
}
 
/**
 * 客户端
 */
class Client {
 
   /**
   * Main program.
   */
  public static function main() {
    $class = new ConcreteClass();
    $class->templateMethod();
  }
}
 
Client::main();
&#63;>
Copy after login

7. Template method pattern
Template method is a basic technology for code reuse. Template method leads to a reflective control structure, which refers to the operation of a parent class calling a child class.
The implementation process: prepare an abstract class, implement part of the logic in the form of concrete methods and concrete constructors, and then declare some abstract methods to force the subclass to implement the remaining logic. Different subclasses can implement these abstract methods in different ways and thus have different implementations of the remaining logic.
8. Principles of Reconstruction
The principle that should be followed when refactoring is: move the behavior to the high end of the structure, and move the state to the low end of the structure as much as possible.
1. A class should be defined for behavior rather than state.
2. When implementing behavior, abstract states are used instead of concrete states.
3. Divide operations into layers.
4. Defer status confirmation to subclasses. In the parent class, if you need state attributes, you can call the abstract value method, and put the implementation of the abstract value method in the concrete subclass.
If the above rules can be followed, then the interface and implementation can be separated in the hierarchical structure, and abstraction and concreteness can be separated, thereby ensuring that the code can be reused to the maximum extent.

The above is the code that uses PHP to implement the template method pattern. There are also some conceptual distinctions about the template method pattern. I hope it will be helpful to everyone's learning.

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)
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Have Crossplay?
1 months 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)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? Apr 03, 2025 am 12:03 AM

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.

See all articles