Рубрики
Uncategorized

Шаблон дизайна PHP (9) детали примера фасада [структурный]

Автор оригинала: David Wong.

В этой статье описывается шаблон проектирования PHP: фасад. Для вашей справки приведем следующие сведения:

1. Обзор

В режиме внешнего вида мы можем видеть только объекты внешнего вида, но не конкретные объекты деталей, обертывая внешний вид. Это, несомненно, снизит сложность приложения и улучшит ремонтопригодность программы. Пример 1: главный выключатель питания может управлять включением и выключением четырех светильников, вентилятора, кондиционера и телевизора. Главный выключатель питания может управлять всем вышеуказанным электрическим оборудованием одновременно, а главный выключатель питания-это дизайн режима внешнего вида системы.

2. Проблемы

Чтобы снизить сложность, система часто делится на несколько подсистем. Но как свести к минимуму связь и взаимозависимость между системами?

3. Решения

Режим внешнего вида Для обеспечения согласованного интерфейса для набора интерфейсов в подсистеме шаблон фасада определяет интерфейс высокого уровня, который упрощает использование подсистемы. После введения роли внешнего вида пользователю необходимо только напрямую взаимодействовать с ролью внешнего вида, и сложные отношения между пользователем и подсистемой реализуются ролью внешнего вида, что снижает степень связи системы.

4. Применимость

Используйте режим фасада, когда вы сталкиваетесь со следующими ситуациями: 1) когда вы хотите предоставить простой интерфейс для сложной подсистемы. Подсистемы, как правило, становятся все более и более сложными из-за непрерывной эволюции. Большинство шаблонов при использовании создают все больше и меньше классов. Это делает подсистему более многоразовой и простой в настройке, но также создает некоторые трудности для пользователей, которым не нужно настраивать подсистему. Фасад может предоставлять простой вид по умолчанию, этого вида достаточно для большинства пользователей, и те, кому нужна большая настраиваемость, могут перейти через слой фасада. 2) существует большая зависимость между клиентской программой и частью реализации абстрактного класса. Внедрение фасада может отделить подсистему от клиентов и других подсистем, что может повысить независимость и мобильность подсистемы. 3) когда вам нужно построить иерархическую подсистему, используйте шаблон фасада, чтобы определить точку входа каждого слоя в подсистеме. Если подсистемы являются

5. Структура

6. Состав режима строительства

Фасад: это основа рисунка. Он вызывается ролью клиента и знает функции каждой подсистемы. В то же время несколько функциональных комбинаций зарезервированы в соответствии с существующими требованиями ролей клиентов\ классов подсистем: реализует функции подсистемы и обрабатывает задачи, назначенные объектами фасада. Для подсистемы роли фасада и клиента неизвестны, и нет никакой информации о фасаде; то есть нет экземпляра, указывающего на фасад. Клиент: вызовите роль фасада для выполнения соответствующих функций.

7. Эффект

Фасадная модель обладает следующими преимуществами:

1) Защита компонентов подсистемы от клиентов уменьшает количество объектов, обрабатываемых клиентами, и упрощает использование подсистемы . Благодаря введению шаблона внешнего вида код клиента становится очень простым и имеет мало связанных с ним объектов. 2) Реализована слабая связь между подсистемой и клиентом Таким образом, изменения компонентов подсистемы не повлияют на вызывающий ее класс клиента, и необходимо настроить только класс внешнего вида. 3) Это уменьшает зависимость от компиляции в больших программных системах и упрощает процесс миграции между различными платформами , поскольку компиляция одной подсистемы обычно не требует компиляции всех других подсистем. Изменения в одной подсистеме не влияют на другие подсистемы, а изменения внутри подсистемы не влияют на объекты внешнего вида. 4) Он обеспечивает только единый доступ к подсистеме и не влияет на прямое использование пользователями классов подсистем. Фасад

8. Реализация

Мы используем пример переключателя;

php 
/**
 *Appearance mode
 *
 */
 class SwitchFacade
{
	private $_ Light = null; // light
	private $_ AC = null; // air conditioning
	private $_ Fan = null; // electric fan
	private $_ TV = null; // TV
	
	public function __construct()
	{
		$this->_light = new Light();
		$this->_fan = new Fan();
		$this->_ac = new AirConditioner();
		$this->_tv = new Television();
	}
	/**
	 *Turn on the lights at night
	 *
	 */
	public function method1($isOpen =1) {
		if ($isOpen == 1) {
			$this->_light->on();
			$this->_fan->on();
			$this->_ac->on();
			$this->_tv->on();
		}else{
			$this->_light->off();
			$this->_fan->off();
			$this->_ac->off();
			$this->_tv->off();
		}
 
	}
	/**
	 *No lights are needed during the day
	 *
	 */
	public function method2() {
		if ($isOpen == 1) {
			$this->_fan->on();
			$this->_ac->on();
			$this->_tv->on();
		}else{
			$this->_fan->off();
			$this->_ac->off();
			$this->_tv->off();
		}
	}
}
 
/******************************************Subsystem class************/
/**
 * 
*/ 
class Light
{	
	private $_isOpen = 0;
	public function on() {
		echo 'Light is open', '
'; $this->_isOpen = 1; } public function off() { echo 'Light is off', '
'; $this->_isOpen = 0; } } class Fan { private $_isOpen = 0; public function on() { echo 'Fan is open', '
'; $this->_isOpen = 1; } public function off() { echo 'Fan is off', '
'; $this->_isOpen = 0; } } class AirConditioner { private $_isOpen = 0; public function on() { echo 'AirConditioner is open', '
'; $this->_isOpen = 1; } public function off() { echo 'AirConditioner is off', '
'; $this->_isOpen = 0; } } class Television { private $_isOpen = 0; public function on() { echo 'Television is open', '
'; $this->_isOpen = 1; } public function off() { echo 'Television is off', '
'; $this->_isOpen = 0; } } /** *Customer class * */ class client { static function open() { $f = new SwitchFacade(); $f->method1(1); } static function close() { $f = new SwitchFacade(); $f->method1(0); } } client::open();

11. Другие связанные модели

1) Абстрактный фабричный шаблон Абстрактный фабричный стиль может использоваться с фасадным рисунком для обеспечения интерфейса, который может использоваться для создания объектов подсистемы независимым от подсистемы способом. Абстрактная фабрика также может заменить шаблон фасада, чтобы скрыть классы, связанные с платформой. 2) Промежуточная модель Шаблон посредника аналогичен шаблону фасада в том, что он абстрагирует функции некоторых существующих классов. Однако цель посредника состоит в том, чтобы абстрагировать любое общение между коллегами и обычно концентрировать функции, которые не принадлежат какому-либо одному объекту. Объект-коллега посредника знает посредника и общается с ним, а не напрямую общается с другими аналогичными объектами. В отличие от этого, шаблон фасада только абстрагирует интерфейсы объектов подсистемы, чтобы упростить их использование; он не определяет новые функции, и подсистема не знает о существовании фасада. Вообще говоря, требуется только один объект фасада, поэтому фасад

12. Краткое изложение

1) В соответствии с “принципом единой ответственности” Общая цель проектирования состоит в том, чтобы свести к минимуму связь и взаимозависимость между подсистемами. Одним из способов достижения этой цели является внедрение объекта фасада, который обеспечивает простой и единый доступ для доступа к подсистеме.

2) Шаблон внешнего вида также является воплощением “закона Димитара” , Вводя новый класс внешнего вида, сложность исходной системы может быть уменьшена Класс внешнего вида выступает в качестве “третьей стороны” между классом клиента и классом подсистемы, В то же время степень связи между классом клиента и классом подсистемы снижается . Шаблон внешнего вида является мощным оружием для реализации рефакторинга кода в соответствии с требованиями “Закона Димитара”.

3) Режим внешнего вида Требуется, чтобы связь между внешней и внутренней частями подсистемы осуществлялась через единый объект внешнего вида. Класс внешнего вида разделяет внутреннюю сложность клиента и подсистемы, так что клиенту нужно иметь дело только с объектом внешнего вида, но не со многими объектами в подсистеме. 4) Режим внешнего вида значительно повышает удобство использования клиента, так что клиенту не нужно заботиться о деталях подсистемы и он может вызывать соответствующие функции через роль внешнего вида. 5) Не пытайтесь добавить новое поведение в подсистему через класс внешнего вида и не добавляйте новое поведение в подсистему, наследовав класс внешнего вида. Это неправильно. Цель шаблона внешнего вида состоит в том, чтобы обеспечить централизованный и упрощенный канал связи для подсистемы, а не добавлять в подсистему новые модели поведения. Добавление нового поведения должно быть реализовано путем изменения исходной подсистемы

13. Расширение шаблона

Система имеет несколько классов внешнего вида: В режиме оболочки обычно требуется только один класс внешнего вида, и существует только один экземпляр этого класса фасада, другими словами, это Одноэлементный класс . Во многих случаях для экономии системных ресурсов класс внешнего вида обычно разрабатывается как одноэлементный класс . Конечно, это не означает, что во всей системе существует только один класс внешнего вида, В системе может быть разработано несколько классов внешнего вида., и каждый класс внешнего вида отвечает за взаимодействие с некоторыми конкретными подсистемами Для предоставления пользователям соответствующих бизнес-функций. Не пытайтесь добавить новое поведение в подсистему с помощью классов внешнего вида: Не добавляйте новое поведение в подсистему, наследовав класс фасада. Это ошибка . Цель шаблона внешнего вида состоит в том, чтобы обеспечить централизованный и упрощенный канал связи для подсистемы, а не добавлять в подсистему новые модели поведения. Добавление нового поведения

UML:

Подробнее о содержании, связанном с PHP заинтересованные читатели могут ознакомиться с этой темой сайта: “Вводный учебник по объектно-ориентированному программированию PHP”, “Навыки работы с массивом PHP (массив)”, “Вводный курс по основному синтаксису PHP”, “Краткое описание операций и использования операторов PHP”, “Краткое описание использования символьной строки (строки) PHP”, “Руководство по вводу в эксплуатацию базы данных PHP + MySQL” и “Общая работа с базой данных PHP” Краткое описание навыков написания

Я надеюсь, что эта статья поможет вам в программировании на PHP.