Лабораторная работа 6 (ПКРПСиБД LAB6 Бочаров И.А.)

Посмотреть архив целиком

Национальный исследовательский институт

Московский Энергетический Институт (Технический Университет)

Институт автоматики и вычислительной техники

Кафедра Прикладной математики





Лабораторная работа №6

по дисциплине:

Проектирование крупных распределенных программных систем и баз данных

тема: «Разработка одного из структурных паттернов»

вариант №5 – «Faсade/Фасад»







Выполнил:

Бочаров Иван Андреевич

Проверил:

к.т.н., доц. Куриленко Иван Евгеньевич







Москва

2012 г.

Шаблон проектирования «Фасад»

Категория шаблона

Шаблон проектирования «Фасад» относится к структурным шаблонам проектирования.

Описание шаблона

Представляет унифицированный интерфейс вместо набора интерфейсов некоторой подсистемы. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы.

Уместность применения

Шаблон следует применять, если:

  • Необходимо предоставить простой интерфейс к сложной подсистеме

  • Между клиентами и классами реализации существует много зависимостей

  • Необходимо разделить систему на различные «слои»

Преимущества, достигаемые при использовании данного шаблона

Данный шаблон:

  • Изолирует клиентов от компонентов подсистемы, уменьшая тем самым число объектов, с которыми клиентам приходится иметь дело, и упрощая работу с подсистемой

  • Позволяет ослабить связанность между подсистемой и ее клиентами

  • Не препятствует приложениям напрямую обращаться к классам подсистемы, если это необходимо. Это позволяет достигать компромисса между простотой и общностью

Недостатки данного шаблона

В случае, если фасад является единственной точкой доступа к подсистеме, он может ограничивать доступ к функциям подсистемы и лишать взаимодействие гибкости.

Реализация

Facade.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace FacadePattern

{

class Facade

{

static GreetingSubsystem greet;

static AskingSubsystem ask;

static ReplySubsystem reply;


public Facade() {

greet = new GreetingSubsystem();

ask = new AskingSubsystem();

reply = new ReplySubsystem();

}


public void Greet() {

greet.HelloMaster();

}

public string AskForName() {

return ask.AskForName();

}

public void Reply(string name) {

reply.Reply(name);

}

}

}


Subsystems.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace FacadePattern

{

class GreetingSubsystem

{

public void HelloMaster() {

Console.WriteLine("Hello, Master!");

}

}


class AskingSubsystem {

public string AskForName() {

Console.WriteLine("Let's know each other better! What is your name?");

return Console.ReadLine();

}

}


class ReplySubsystem {

public void Reply(string name) {

Console.WriteLine(name+"... Well, your parents know how to have fun...");

}

}

}


Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace FacadePattern

{

class Program

{

static void Main(string[] args)

{

Facade facade = new Facade();


facade.Greet();

string name = facade.AskForName();

facade.Reply(name);

Console.ReadLine();

}

}

}




UML-диаграмма классов

Диаграмма последовательностей







Литература

  1. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. — СПб: Питер, 2001. — 368 с.: ил. (Серия «Библиотека программиста»)


Случайные файлы

Файл
163704.rtf
CivRivers.DOC
22432-1.rtf
115109.rtf
3171-1.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.