工厂模式通常为具体类创建基类,然后从该基类继承具体类。对于很多应用程序,我们需要知道这个工厂可以创建的具体类的数量。例如,工厂,创建典型形状的对象(圆的,矩形的等),C#代码下面的例子:如何从工厂模式中获取具体类的数量?
public class ShapeFactory
{
public IShape GetShape(int shapeIndex)
{
IShape s = null;
const int color = 1;
const int thickness = 5;
switch (shapeIndex)
{
case 1: s = new Square(color, thickness);
break;
case 2: s = new Triangle(thickness);
break;
case 3: s = new Circle(color);
break;
}
return s;
}
}
用户可能想要知道有多少种形状的由程序的支持。我知道有两种方法可以做到这一点:
- 将数字设置为工厂类中的一个常量,并使其对公众可见 。缺点是每次添加新的图形时,都必须手动增加图形的数量。
- 创建一个动态容器(C#中的List),其中包含工厂可以创建的具体对象的所有实例 。优点是 ,即使添加了新的Shape类,它也可以自动计算出它可以创建的形状数量 。缺点是 显而易见,每种形状都必须与 一起创建形状请求!
这样做的最好方法是什么?关于这个特定主题的任何最佳实践?
这种工厂的预期公共接口是什么?你能显示一些代码吗? –
你能举一个例子,你什么时候需要知道工厂可以创建的具体类的数量? – adv12
@YacoubMassad,请参阅编辑。 – james