Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2014, 15:52   #1
yaprogrammist
Пользователь
 
Регистрация: 31.08.2013
Сообщений: 15
По умолчанию Реализация шаблона Фабрика

Сейчас изучаю шаблоны проектирования и остановился на Фабрике. Пытаюсь сделать примитивный пример но не получается. Есть одна ошибка. Вот мой код:

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace factory
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ConcreteObjectCreator obj =  ConcreteObjectCreator.CreateClass(1);
        }
    }




    public abstract class ObjectCreator
    {
        public abstract AbstractClass CreateObject(int number);
    }


    public class ConcreteObjectCreator: ObjectCreator 
    {
        public static ObjectCreator CreateClass(int number)
        {
            switch (number)
            {
                case 1: return new First();
                case 2: return new Second();
                default: return new Third();
            }
        }
    }

    public abstract class AbstractClass 
    { 
    }

    public class First : AbstractClass 
    {
    } 

    public class Second : AbstractClass
    {
    
    }

    public class Third : AbstractClass 
    {
    }
}
Как правильно это сделать?
Вложения
Тип файла: rar factory.rar (29.6 Кб, 6 просмотров)
yaprogrammist вне форума Ответить с цитированием
Старый 30.03.2014, 16:09   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

ошибка где?
eval вне форума Ответить с цитированием
Старый 30.03.2014, 16:29   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Нет задачи, нет понимания смысла паттернов (и не только фабрики, а в целом), вывод - никому ненужная ересь. С тем же успехом можно в вики посмотреть пример и не заморачиваться. Паттерн - не цель, а только пример решения определенной задачи.
pu4koff вне форума Ответить с цитированием
Старый 30.03.2014, 16:47   #4
IT-Lopata
7 - классник
Форумчанин
 
Аватар для IT-Lopata
 
Регистрация: 27.03.2014
Сообщений: 181
По умолчанию

как я понимаю фабрике нужно быть единственным классом и создавать другие классы.

Цитата:
public static ObjectCreator CreateClass(int number)
лучше Enum сделать, а не просто циферки вписывать
Фабрика FactoryBuilding создает здания - public Building CreateBuilding (enum BuildingEnum)

слушайте, а если в состав программы водятся новые здания, фабрику придется постоянно дополнять править ветку switch в методе фабрики ? или как то без правки фабрики можно ?
IT-Lopata вне форума Ответить с цитированием
Старый 30.03.2014, 17:05   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

через rtti, RegisterClass
а в принципе все равно код править, так и фабрику заодно
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение ссылки на функцию из класса шаблона и передача ее как параметр шаблона pror0ck Общие вопросы C/C++ 7 17.06.2012 15:06
C++ Абстрактная фабрика PitMagnum Помощь студентам 0 28.05.2012 11:54
Использование файлов XLS в качестве шаблона и отображение этого шаблона в приложении Delphi? vodyara Общие вопросы Delphi 0 23.04.2012 13:13
Реализация шаблона по изменению времени DrHome Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 25.04.2010 21:24