수업소개
abstract는 클래스의 메소드를 하위 클래스가 반드시 오버라이드 하도록 하는 것입니다. 이것을 통해서 부모 클래스의 일부 기능을 하위 클래스가 구현하도록 강제할 수 있습니다.
이 수업에서는 디자인 패턴이 무엇인가를 설명합니다. 그 중에서 템플릿 메소드 패턴을 통해서 추상 클래스가 사용되는 구체적인 사례를 살펴봅니다.
수업
소개
형식
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php abstract class ParentClass { public function a() { echo 'a' ; } public abstract function b(); } class ChildClass extends ParentClass { public function b() { } } |
사례 : 템플릿 메소드 패턴
템플릿 메소드 패턴 구현
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 | <?php abstract class AbstractPageTemplate { protected final function template() { $result = $this ->header(); $result .= $this ->article(); $result .= $this ->footer(); return $result ; } protected abstract function header(); protected abstract function article(); protected abstract function footer(); public function render() { return $this ->template(); } } class TextPage extends AbstractPageTemplate { protected function header() { return "PHP\n" ; } protected function article() { return "PHP: Hypertext Preprocessor\n" ; } protected function footer() { return "website is php.net\n" ; } } class HtmlPage extends AbstractPageTemplate { protected function header() { return "<header>PHP</header>\n" ; } protected function article() { return "<article>PHP: Hypertext Preprocessor</article>\n" ; } protected function footer() { return "<footer>website is php.net</footer>\n" ; } public function render() { $result = '<html>' ; $result .= $this ->template(); return $result . '</html>' ; } } echo '<h1>text</h1>' ; $text = new TextPage(); echo $text ->render(); echo '<h1>html</h1>' ; $html = new HtmlPage(); echo $html ->render(); |