Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ООАП.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
735.74 Кб
Скачать
  1. Шаблон Одиночка (Singleton): описание и пример программной реализации.

Одиночка (англ. Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр класса с глобальной точкой доступа.

Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа. Существенно то, что можно пользоваться именно экземпляром класса, так как при этом во многих случаях становится доступной более широкая функциональность. Например, к описанным компонентам класса можно обращаться через интерфейс, если такая возможность поддерживается языком.

Глобальный «одинокий» объект — именно объект, а не набор процедур, не привязанных ни к какому объекту — бывает нужен:

  • если используется существующая объектно-ориентированная библиотека;

  • если есть шансы, что один объект когда-нибудь превратится в несколько;

  • если интерфейс объекта (например, игрового мира) слишком сложен, и не стоит засорять основное пространство имён большим количеством функций;

  • если, в зависимости от каких-нибудь условий и настроек, создаётся один из нескольких объектов. Например, в зависимости от того, ведётся лог или нет, создаётся или настоящий объект, пишущий в файл, или «заглушка», ничего не делающая.

public class Singleton

{

private static readonly Singleton instance = new Singleton();

public static Singleton Instance

{

get { return instance; }

}

/// Защищенный конструктор нужен, чтобы предотвратить создание экземпляра класса Singleton

protected Singleton() { }

}

  1. Шаблон Адаптер: назначение, структура, пример программной реализации.

Адаптер (англ. Adapter или англ. Wrapper — Обёртка) — структурный шаблон проектирования, предназначенный для организации использования функций объекта, недоступного для модификации, через специально созданный интерфейс.

Класс Adapter приводит интерфейс класса Adaptee в соответствие с интерфейсом класса Target (наследником которого является Adapter). Это позволяет объекту Client использовать объектAdaptee (посредством адаптера Adapter) так, словно он является экземпляром класса Target.

Таким образом Client обращается к интерфейсу Target, реализованному в наследнике Adapter, который перенаправляет обращение к Adaptee.

using System;

namespace Adapter

{

class MainApp

{

static void Main()

{

// Create adapter and place a request

Target target = new Adapter();

target.Request();

// Wait for user

Console.Read();

}

}

// "Target"

class Target

{

public virtual void Request()

{

Console.WriteLine("Called Target Request()");

}

}

// "Adapter"

class Adapter : Target

{

private Adaptee adaptee = new Adaptee();

public override void Request()

{

// Possibly do some other work

// and then call SpecificRequest

adaptee.SpecificRequest();

}

}

// "Adaptee"

class Adaptee

{

public void SpecificRequest()

{

Console.WriteLine("Called SpecificRequest()");

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]