Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit fe1a8f8

Browse files
committed
Template method
1 parent f1dbabc commit fe1a8f8

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ See details on http://maxsite.org/page/php-patterns
1919
* "Decorator" (Structural)
2020
* "Flyweight" (Structural)
2121
* "Proxy" (Structural)
22+
* "Template method" (Behavioral)
2223

2324

2425
(c) MaxSite.org, 2019, http://maxsite.org/

‎Templatemethod/index.php

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
<?php
2+
3+
/**
4+
* Design pattern "Template method" (Behavioral)
5+
* This is demo code
6+
* See for details: http://maxsite.org/page/php-patterns
7+
*/
8+
9+
/**
10+
* Base class
11+
*/
12+
abstract class AlgorithmAbstract
13+
{
14+
// abstract methods
15+
abstract function step1();
16+
abstract function step2();
17+
18+
// method with implement
19+
function baseOperation()
20+
{
21+
echo 'AlgorithmAbstract baseOperation<br>';
22+
}
23+
24+
// free method
25+
function hook() {}
26+
27+
// Run all Actions — this is algorithm
28+
function run()
29+
{
30+
$this->step1();
31+
$this->step2();
32+
$this->baseOperation();
33+
$this->hook();
34+
}
35+
}
36+
37+
/**
38+
* Class1 for sample
39+
*/
40+
class Class1 extends AlgorithmAbstract
41+
{
42+
function step1()
43+
{
44+
echo 'Class1 step1<br>';
45+
}
46+
47+
function step2()
48+
{
49+
echo 'Class1 step2<br>';
50+
}
51+
}
52+
53+
/**
54+
* Class2 for sample
55+
*/
56+
class Class2 extends AlgorithmAbstract
57+
{
58+
function step1()
59+
{
60+
echo 'Class2 step1<br>';
61+
}
62+
63+
function step2()
64+
{
65+
echo 'Class2 step2<br>';
66+
}
67+
68+
function hook()
69+
{
70+
echo 'Class2 hook<br>';
71+
}
72+
73+
function baseOperation()
74+
{
75+
echo 'Class2 baseOperation<br>';
76+
}
77+
}
78+
79+
/**
80+
* Class3 for sample
81+
*/
82+
class Class3 extends Class2
83+
{
84+
// replace method in Class2
85+
function step2()
86+
{
87+
echo 'Class3 step2<br>';
88+
}
89+
}
90+
91+
/**
92+
* demo
93+
*/
94+
95+
$a = new Class1();
96+
$a->run();
97+
/*
98+
Class1 step1
99+
Class1 step2
100+
AlgorithmAbstract baseOperation
101+
*/
102+
103+
$b = new Class2();
104+
$b->run();
105+
/*
106+
Class2 step1
107+
Class2 step2
108+
Class2 baseOperation
109+
Class2 hook
110+
*/
111+
112+
$c = new Class3();
113+
$c->run();
114+
/*
115+
Class2 step1
116+
Class3 step2
117+
Class2 baseOperation
118+
Class2 hook
119+
*/
120+
121+
# end of file

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /