【发布时间】:2011-05-25 11:42:03
【问题描述】:
MyObject 有一个形状,必须选择该形状并将其作为参数传递给 ctor,没有形状就不能存在 MyObject,并且形状不能随他的一生而变化。这在现实生活中经常发生。
namespace JackNova.ConsoleClient.Test.Fun
{
abstract class Shape { }
class Circle : Shape { }
class Square : Shape { }
class Triangle : Shape { }
static class Shapes
{
public static Circle Circle { get { return new Circle(); } }
public static Square Square { get { return new Square(); } }
public static Triangle Triangle { get { return new Triangle(); } }
}
class MyObject
{
public Shape Shape { get; private set; }
public MyObject(Shape shape)
{
this.Shape = shape;
}
}
class Test
{
static void Run()
{
MyObject coolOne = new MyObject(Shapes.Circle);
}
}
}
我认为我在这里违反了一些原则,例如开放式封闭式。 我的目的是在设计时简化开发。正如您所看到的,当我实例化 MyObject 时,我不必记住可以作为参数传递的对象类型,但它们是由抽象类实例化并传递的。
你觉得这很糟糕吗?
【问题讨论】:
-
有趣的是 .net 框架如何仅使用枚举来做类似的事情:msdn.microsoft.com/en-us/library/…
标签: c# design-patterns architecture static instance