Извините, если это действительно основной вопрос, но я борюсь с тем, как я должен атаковать это. Я пытаюсь обернуть несколько команд для объекта OLE, основная спецификация выглядит следующим образом:Будет ли это хорошим аргументом в пользу полиморфизма
Set Window window_id
//Units is part of the position setter.
[ Position (x, y) [ Units paper_units ] ]
[ Width win_width [ Units paper_units ] ]
[ Height win_height [ Units paper_units ] ]
..... this goes on for about 20+ commands, all optional.
Где anyhting между [] является необязательным.
Поэтому мне нужно создать класс позволяет называть его «CommandBuilder», который может будет установить методы для всех этих дополнительных сеттеров, то отлично, я могу справиться с этим, основной проблемой, у меня есть метод, который ToCommandString необходимо Ouput строки, которая будет выглядеть Somthing как:
Set Window 1 Position (x,y) Units "m" Height 100 Units "m" + what ever else the user added
Просто делают некоторые, если основаны на переменных, которые получают набор и соединение строки отлично работает, когда нет ничего сложного переменных создаются или есть только несколько переменных, но когда есть кучи переменных и/или вложенных значений, которые также являются необязательными, он может сделать метод ToString очень длинным и сложным + сложным поддерживать, если что-то изменится.
Мне было интересно, могу ли я решить это, используя полиморфизм, делая что-то подобное.
interface ICommand
{
string ToCommandString();
}
class PositionCommand : ICommand
{
double X;
double Y;
string Units;
public PositionCommand(double x, double y)
{
this.X = x;
this.Y = y;
}
public PositionCommand(double x,double y, string units)
{
this.X = x;
this.Y = y;
this.Units = units;
}
public string ToCommandString()
{
//Add more stuff here to handle empty units.
return String.Format(" Postion ({0},{1})", X.ToString(), Y.ToString());
}
}
....more command classes.
Тогда все мои методы набора в «CommandBuilder» может просто создать тип правой команды добавить его в список, то основной ToString в методе «CommandBuilder» может перебрать все те, которые имеют был установлен и вызывается ToCommandString, и вам не нужно беспокоиться о том, чтобы делать какие-либо изменения в статусе или null.
Будет ли это правильным путем?
P.S. Если вам нужна дополнительная информация, я был бы рад добавить, просто не хотел, чтобы это было вначале.
Могу ли я просто что-то спросить? Почему вы возвращаете объект CommandBuilder из функции position? – 2008-12-12 04:01:32