Приветствую Вас, Гость | RSS
Четверг, 17.09.2026, 03:29
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
"Hello Wold" в патернах
Дата: Среда, 15.05.2013, 22:30 | Сообщение # 1
Глава компании
Администраторы
Сообщений: 57
Наград: 0
PHP
  • <?php

  • /********************************************************************
  • Model-View-Controller implementation according to POSA
  • (Pattern-Oriented Software Architecture
  • [url=http://www.hillside.net/patterns/books/Siemens/book.html)]http://www.hillside.net/patterns/books/Siemens/book.html)[/url]

  • ********************************************************************/
  •  
  • class HelloWorldController {
  • private $model;
  • function __construct($model) {
  • $this->model = $model;
  • }
  •  
  • function handleEvent($args) {
  • $this->model->setStrategy($args[2]);
  • $this->model->addText($args[1]);
  • }
  • }
  •  
  •  
  • class HelloWorldModel {
  • private $text;
  • private $observers = array();
  • private $strategy;

  • function attach($observer) {
  • $this->observers[] = $observer;
  • }
  •  
  • function getData() {
  • $facade = new HelloWorldFacade($this->strategy);
  • return $facade->getHelloWorld().$this->text."";
  • }
  •  
  • function addText($text='') {
  • $this->text = $text;
  • $this->notify();
  • }
  •  
  • function setStrategy($strategy) {
  • $this->strategy = $strategy;
  • }

  • function notify() {
  • foreach ($this->observers as $observer) {
  • $observer->update();
  • }
  • }
  • }
  •  
  • class HelloWorldView {
  • private $model;
  •  
  • function initialize($model) {
  • $this->model = $model;
  • $model->attach($this);
  • return $this->makeController();
  • }
  •  
  • function makeController() {
  • return new HelloWorldController($this->model);
  • }
  •  
  • function update() {
  • $this->display();
  • }
  •  
  • function display() {
  • echo $this->model->getData();
  • }
  • }
  •  
  •  
  • /*********************************************************************
  • "Business logic"
  • ********************************************************************/
  •  
  • class HelloWorld {
  • function execute() {
  • return "Hello world";
  • }
  • }
  •  
  • class HelloWorldDecorator {
  • private $helloworld;
  • function __construct($helloworld) {
  • $this->helloworld = $helloworld;
  • }
  •  
  • function execute() {
  • return $this->helloworld->execute();
  • }
  • }
  •  
  • abstract class HelloWorldEmphasisStrategy {
  • abstract function emphasize($string);
  • }
  •  
  • class HelloWorldBangEmphasisStrategy extends HelloWorldEmphasisStrategy {
  • function emphasize($string) {
  • return $string."!";
  • }
  • }
  •  
  • class HelloWorldRepetitionEmphasisStrategy extends HelloWorldEmphasisStrategy {
  • function emphasize($string) {
  • return $string." and ".$string." again";
  • }
  • }
  •  
  • class HelloWorldEmphasizer extends HelloWorldDecorator {
  • private $strategy;
  • function HelloWorldEmphasizer($helloworld,$strategy) {
  • $this->strategy = $strategy;
  • parent::__construct($helloworld);
  • }
  •  
  • function execute() {
  • $string = parent::execute();
  • return $this->strategy->emphasize($string);
  • }
  • }
  •  
  • class HelloWorldStrategyFactory {
  • static function make($type) {
  • if ($type == 'repetition') return self::makeRepetitionStrategy();
  • return self::makeBangStrategy();
  • }
  •  
  • static function makeBangStrategy() {
  • return new HelloWorldBangEmphasisStrategy;
  • }
  • static function makeRepetitionStrategy() {
  • return new HelloWorldRepetitionEmphasisStrategy;
  • }
  • }
  •  
  • class HelloWorldFormatter extends HelloWorldDecorator {
  • function execute() {
  • $string = parent::execute();
  • return $string."";
  • }
  • }
  •  
  • class HelloWorldFacade {
  • private $strategy;
  • function __construct($strategyType) {
  • $this->strategy = HelloWorldStrategyFactory::make($strategyType);
  • }
  •  
  • function getHelloWorld() {
  • $formatter = new HelloWorldFormatter(
  • new HelloWorldEmphasizer(
  • new HelloWorld,$this->strategy));
  • return $formatter->execute();
  • }
  • }
  •  
  • $model = new HelloWorldModel;
  • $view = new HelloWorldView;
  • $controller = $view->initialize($model);
  • $controller->handleEvent($_SERVER['argv']);
  •  
  • ?>

    Советую разобраться начинающим...
    • Страница 1 из 1
    • 1
    Поиск:

    Команда разработчиков F.W © 2026 - 2015 | Используются технологии uCoz