Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пак Новакова + / Раздел_1.Ч1_3-1_4.СоловьёвЯрославцева (EF и изучение паттернов).docx
Скачиваний:
82
Добавлен:
03.06.2014
Размер:
719.63 Кб
Скачать

Упражнение 2 - паттерн одиночка

  1. Собираем код из задания и реализуем его.

namespace Singleton

{

public class Singleton

{

protected static int name = 0;

protected Singleton()

{

name += 1;

Console.WriteLine("Singleton has been planted");

}

public static Singleton Instance

{

get { return SingletonCreator.Instance; }

}

public string getName

{

get { return name.ToString(); }

}

private sealed class SingletonCreator

{

private static readonly Singleton instance = new Singleton();

public static Singleton Instance

{

get { return SingletonCreator.instance; }

}

}

}

}

  1. Откомпилировали код и запускаем программу.

Результат:

Рис. 7

  1. Реализуем паттерн Одиночка по стандартной схеме:

class Singleton

{

private static Singleton _instance = null;

private static int count = 0;

private Singleton()

{

count += 1;

}

public static Singleton GetInstance()

{

if (_instance == null)

{

_instance = new Singleton();

}

Console.Write(count.ToString() + " ");

return _instance;

}

public string Count { get { return count.ToString(); } }

}

  1. Далее реализуем класс без применения паттерна Одиночка для сравнения результатов работы:

class NotSingleton

{

private static int count = 0;

public NotSingleton()

{

count += 1;

Console.Write(count.ToString() + " ");

}

public string Count { get { return count.ToString(); } }

}

  1. Используем код согласно заданию:

class MainClass

{

static void Main(string[] args)

{

List<Singleton> singletonList = new List<Singleton>();

List<NotSingleton> notSingletonList = new List<NotSingleton>();

for (int i = 0; i < 10; ++i)

{

singletonList.Add(Singleton.GetInstance());

}

Console.WriteLine();

for (int i = 0; i < 10; ++i)

{

notSingletonList.Add(new NotSingleton());

}

Console.ReadKey();

}

}

Результат работы программы:

Рис. 8. Результат задания

Упражнение 3 - паттерн интерфейс

  1. Создаём интерфейсы FlyBehaviorиQuackBehavior:

namespace DesignPatternsLab

{

interface FlyBehavior

{

void fly();

}

}

namespace DesignPatternsLab

{

interface QuackBehavior

{

void quack();

}

}

  1. Реализуем «поведение», используя интерфейсы:

  1. Файл Fly.cs(Реализация полета)

namespace DesignPatternsLab

{

class FlyWithWings : FlyBehavior

{

public void fly()

{

System.Console.WriteLine("I can fly");

}

}

class FlyNoWay : FlyBehavior

{

public void fly()

{

System.Console.WriteLine("I can`t fly");

} }}

  1. Файл Quack.cs(Реализация кряканья)

namespace DesignPatternsLab

{

class Quack : QuackBehavior

{

public void quack()

{

System.Console.WriteLine("Quack");

} }

class Slience : QuackBehavior

{

public void quack()

{

System.Console.WriteLine("Silence");

}

}

}

  1. Базовый класс Duck:

class Duck

{

protected FlyBehavior flybehavior;

protected QuackBehavior quackbehavior;

public Duck() { }

public void performFly()

{

flybehavior.fly(); }

public void performQuack()

{

quackbehavior.quack();

}

public void swim() { } }

  1. Изменяем класс Duck

class MallardDuck : Duck

{

public MallardDuck()

{

quackbehavior = new Quack();

flybehavior = new FlyWithWings(); // не может летать!

System.Console.WriteLine("I MallardDuck");

} }

  1. По заданию создали класс WoodDuck

class WoodDuck : Duck

{

public WoodDuck()

{

quackbehavior = new Slience(); // деревянная утка не издает звуков

flybehavior = new FlyNoWay(); // и не летает

System.Console.WriteLine("I WoodDuck");

} }

  1. Итоговый код:

class MainClass

{static void Main(string[] args)

{

Duck mallard = new MallardDuck();

mallard.performQuack();

mallard.performFly();

Duck wood = new WoodDuck();

wood.performQuack();

wood.performFly();

System.Console.ReadKey();

}}

Результат тестирования программы:

Рис. 9. Результат работы паттерна Интерфейс

Вывод: в ходе лабораторной работы ознакомились с применением некоторых паттернов проектирования: паттерн Интерфейс, паттерн Наблюдатель, паттерн Одиночка.

Использование паттернов позволяет снизить число связей между объектами и способствует простоте расширения кода.