2016-08-08 70 views
1

我正在开发一个个人项目,并且遇到了一个问题。使用虚拟方法的静态抽象对象

我有一些对象具有相同的属性,方法等。唯一不同的是它们的名称,属性值和方法的实现。他们还需要通用的方法默认实现。所以马上,一个界面是不可能的。

所以我创建了一个包含属性和“默认”方法的基类。但是这个基类需要抽象。这些方法是虚拟的,因此可以被覆盖。

我需要它们是静态的原因是对象将是其他对象的属性。因此,例如,上面引用的对象是(为了简单起见)objX,objY,objZ。它们来源于它们的基础,objW。

objContainer是一个完全不相关的对象,但它有一个objW类型的属性,它是objX,objY,objZ的一个实例。

objX,objY和objZ将从不更改。它们的属性将全部是只读的。因此objContainer实例的多个对象将具有objX,objY或objZ。

public class objContainer1 
{ 
    objW processor = new objY; 
} 
public class objContainer2 
{ 
    objW processor = new objY; 
} 

我该如何去做这件事?我想让它们保持静态,所以我没有同一个对象的多个实例,当它们全部完全相同时,实际上是这样。

我使用单身吗?工厂模式?

我失去了这个方向(如果有的话)。也许我正在推翻它,并且有一个非常简单的解决方案/

回答

6

您想要谨慎使用静态类。静态类有明显的缺点,例如无法利用类继承的多态特性,因为你不能从静态类继承。唯一一次你想要使用静态类的时候,实际上是当你有一些你想在整个应用程序中使用的相关工具时,你不需要维护任何状态。想一下System.Math这个类,例如:一组数学函数,你可以在你的应用程序的任何地方使用它。拥有这个类的实例并没有什么意义,而且这将会非常繁琐和不必要。

我会建议坚持非静态类和创建这些类的实例。如果你只应该有一个类的实例,那么你应该使用一个单例,就像你所建议的那样。

+0

谢谢。跟进问题。如果所有对象都是具有公共代码的单例,那么他们是否有办法继承父类中的所有单例模式,同时仍然单独是单例本身?我基本上希望派生类实现单例模式,而不必为每个类重复它。 – ilyketurdles