Фабричный метод (Factory Method) — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Admin (обсуждение | вклад) (→Диаграмма классов) |
Admin (обсуждение | вклад) (→Участники) |
||
Строка 13: | Строка 13: | ||
==== Участники==== | ==== Участники==== | ||
− | * | + | *Product - продукт |
+ | Определяет интерфейс объектов, создаваемых фабричным методом | ||
+ | *ConcreteProduct - конкретный продукт | ||
+ | Реализует интерфейс Product | ||
+ | *Creator - создатель | ||
+ | Объявляет фабричный метод, возвращающий объект типа Product | ||
+ | |||
+ | Может определять реализацию по умолчанию для фабричного метода, а также вызывать фабричный метод для создания объекта Product | ||
+ | *ConcreteCreator - конкретный создатель | ||
+ | Замещает фабричный метод, возвращая ConcreteProduct | ||
=== Код=== | === Код=== |
Версия 15:46, 29 августа 2014
Другое имя
Виртуальный конструктор
Назначение
Определяет интерфейс для создания объекта и оставляет подклассам решение о том, какой класс инстанцировать.
Описание
Реализация
Диаграмма классов
Участники
- Product - продукт
Определяет интерфейс объектов, создаваемых фабричным методом
- ConcreteProduct - конкретный продукт
Реализует интерфейс Product
- Creator - создатель
Объявляет фабричный метод, возвращающий объект типа Product
Может определять реализацию по умолчанию для фабричного метода, а также вызывать фабричный метод для создания объекта Product
- ConcreteCreator - конкретный создатель
Замещает фабричный метод, возвращая ConcreteProduct
Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MazeCommon;
namespace MazeGameFactoryMethod
{
class MazeGame
{
public Maze CreateMaze()
{
Maze aMaze = MakeMaze();
Room r1 = MakeRoom(1);
Room r2 = MakeRoom(2);
Door d = MakeDoor(r1, r2);
aMaze.AddRoom(r1);
aMaze.AddRoom(r2);
r1.SetSide(Direction.North, MakeWall());
r1.SetSide(Direction.East, d);
r1.SetSide(Direction.South, MakeWall());
r1.SetSide(Direction.West, MakeWall());
r2.SetSide(Direction.North, MakeWall());
r2.SetSide(Direction.East, MakeWall());
r2.SetSide(Direction.South, MakeWall());
r2.SetSide(Direction.West, d);
return aMaze;
}
public virtual Maze MakeMaze()
{
return new Maze();
}
public virtual Wall MakeWall()
{
return new Wall();
}
public virtual Room MakeRoom(int n)
{
return new Room(n);
}
public virtual Door MakeDoor(Room r1, Room r2)
{
return new Door(r1, r2);
}
};
class ProgramFactoryMethod
{
static void Main(string[] args)
{
Console.WriteLine("FactoryMethod");
var game = new MazeGame();
Maze m = game.CreateMaze();
}
}
}