Heim > Backend-Entwicklung > PHP-Tutorial > Eine kurze Einführung in das Dekoratormuster in PHP-Designmustern

Eine kurze Einführung in das Dekoratormuster in PHP-Designmustern

墨辰丷
Freigeben: 2023-03-31 12:38:01
Original
1830 Leute haben es durchsucht

Dieser Artikel beschreibt hauptsächlich das Dekoratormuster in PHP-Designmustern. Ich hoffe, dass es für alle hilfreich ist.

Definition:

Das Dekoratormuster ist die Funktion zum dynamischen Erweitern einer Klasse, ohne den ursprünglichen Klassencode und die Vererbung zu ändern. Das traditionelle Programmiermodell besteht darin, dass Unterklassen die übergeordnete Klasse erben, um eine Methodenüberladung zu implementieren. Bei Verwendung des Dekoratormusters müssen Sie lediglich ein neues Dekoratorobjekt hinzufügen, was flexibler ist und zu viele Klassen und Ebenen vermeidet.

Rolle:

Component (Basisklasse des dekorierten Objekts)
ConcreteComponent (spezifisches zu dekorierendes Objekt)
Decorator (Basisklasse des Decorators)
ContreteDecorator (spezifische Dekorateurklasse)

Beispielcode:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

//被装饰者基类

interface Component

{

  public function operation();

}

  

//装饰者基类

abstract class Decorator implements Component

{

  protected $component;

  

  public function __construct(Component $component)

  {

    $this->component = $component;

  }

  

  public function operation()

  {

    $this->component->operation();

  }

}

  

//具体装饰者类

class ConcreteComponent implements Component

{

  public function operation()

  {

    echo 'do operation'.PHP_EOL;

  }

}

  

//具体装饰类A

class ConcreteDecoratorA extends Decorator {

  public function __construct(Component $component) {

    parent::__construct($component);

  

  }

  

  public function operation() {

    parent::operation();

    $this->addedOperationA();  // 新增加的操作

  }

  

  public function addedOperationA() {

    echo 'Add Operation A '.PHP_EOL;

  }

}

  

//具体装饰类B

class ConcreteDecoratorB extends Decorator {

  public function __construct(Component $component) {

    parent::__construct($component);

  

  }

  

  public function operation() {

    parent::operation();

    $this->addedOperationB();

  }

  

  public function addedOperationB() {

    echo 'Add Operation B '.PHP_EOL;

  }

}

  

  

class Client {

  

  public static function main() {

    /*

    do operation

    Add Operation A

    */

    $decoratorA = new ConcreteDecoratorA(new ConcreteComponent());

    $decoratorA->operation();

  

  

    /*

    do operation

    Add Operation A

    Add Operation B

    */

    $decoratorB = new ConcreteDecoratorB($decoratorA);

    $decoratorB->operation();

  }

  

}

  

Client::main();

Nach dem Login kopieren

Zusammenfassung: Das Obige ist hoffentlich der gesamte Inhalt dieses Artikels Es kann für das Lernen aller hilfreich sein.

Verwandte Empfehlungen:

So bedienen Sie MySQL-Datenbanken und Sitzungsdialoge mit PHP

Drei häufig verwendete PHP Methoden Tipps zum Durchqueren des Baums

PHP implementiert MySQL-Datenbank-Volume-Sicherung

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in das Dekoratormuster in PHP-Designmustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage