我一直在设计问题上受到挑战,我将在下面进行介绍。构造器的设计模式
假设一个类,称为A,有一个带有一堆参数的构造函数。由于在每个实例化中写入所有这些参数都很累人,所以我编写了另一个类,将其称为StyleSheetA,它封装了所有这些参数,并且是构造函数的唯一参数。这样,我可以准备一些默认值StyleSheetA模板稍后会用到,如果需要的话,我可以修改它们。
在这一点上,我需要扩展A.假设B扩展A. B将有它自己的样式表,即StyleSheetB。我认为StyleSheetB扩展StyleSheetA是合适的,所以对于一个样式表参数,B的构造函数也可以构造它的超类A.但是我担心这种设计可能存在缺陷。例如,如果我决定为样式表添加一个getter/setter?有没有一种新颖的方式来处理所有这些情况?我错了吗?对于那些谁是困惑,我在这里附上一些代码:
class A
{
StyleSheetA ss;
A(StyleSheetA ss)
{
this.ss = ss;
// Do some stuff with ingredients of styleSheet
}
}
class StyleSheetA
{
int n1;
int n2;
// :
// :
int n100;
}
class B extends A
{
B(StyleSheetB ss)
{
super(ss);
// Do some stuff with ingredients of styleSheet
}
}
class StyleSheetB extends StyleSheetA
{
int n101;
int n102;
// :
// :
int n200;
}
谢谢你的任何帮助或建议,也可以是任何的批评可以理解的。
编辑:我在java中开发,所以没有泛型支持。
对于我正在开发的语言来说,这并不明显(但对我而言),但通常泛型/模板可以帮助解决此问题。通过将A类变为A,您可以在从中派生类型时指定组合的类型(例如StyleSheetB):B类延伸A 。如果你没有这样的功能,试试C#;) –
2011-02-09 21:38:46
是的,你的解决方案将是一个很好的方法,但不幸的是我用java开发,并且没有通用的支持。谢谢。 – 2011-02-09 21:41:42
你应该添加一个java-me标签。 ;) – weltraumpirat 2011-02-09 21:48:34