Design patterns 单态遗传
如何从单例类继承到需要相同功能的其他类中?Design patterns 单态遗传,design-patterns,singleton,Design Patterns,Singleton,如何从单例类继承到需要相同功能的其他类中? 像这样的事情有什么意义吗?有人可以随意纠正我,但按照我的理解,有一次我犯了一个错误: public class BaseClass { protected static List<string> ListOfSomething { get; set; } } public class ChildClass { protected static List<int> ListOfSomethingElse { get; s
像这样的事情有什么意义吗?有人可以随意纠正我,但按照我的理解,有一次我犯了一个错误:
public class BaseClass
{
protected static List<string> ListOfSomething { get; set; }
}
public class ChildClass
{
protected static List<int> ListOfSomethingElse { get; set; }
}
public class AnotherChildClass
{
protected static List<int> ListOfSomethingElse { get; set; }
}
公共类基类
{
受保护的静态列表内容{get;set;}
}
公营儿童班
{
受保护的somethingelse{get;set;}的静态列表列表
}
公共类另一个儿童类
{
受保护的somethingelse{get;set;}的静态列表列表
}
两个子类将共享相同的列表
,它们不会有自己的副本。所有孩子将共享相同的静态文件。这是单胎行为和遗传的蜕皮。正如silky所说……你不应该这么做,你可能会遇到类似的事情
如果你不是在谈论这样的事情……我不确定你说的是什么单身汉,举个例子会很有帮助,因为单身汉有很多利基用途。Jon Skeet不久前。虽然使用嵌套的内部类确实有一点不尽如人意,但使用单例继承可以获得一些好处。它没有无限的可扩展性,它只是一种让单例在运行时选择自己实现的技术
实际上,从单例继承并没有多大意义,因为单例模式的一部分是实例管理,一旦您已经有了一个基类型的物理实例,那么在派生类型中重写这一切就太晚了。即使可以,我怀疑这可能会导致设计难以理解,甚至更难测试/维护。您可以从singleton继承,并使用模板(C++)或泛型(C#.NET)进行“重用”或某些微调 我在我的博客()中发布了一系列关于这个主题的帖子: 1) 在C#NET中 2) C#.NET中的线程安全单例继承 3) C语言中的几种单例实现++ 我们邀请您访问这些链接,并与所有人分享您的意见。
祝你好运。有几种解决方案使用内部类和反射(其中一些在其他答案中提到)。然而,我相信所有这些解决方案都涉及客户机和派生类之间的紧密耦合 这是一种允许客户机只依赖于基类的方法,并且是开放的扩展 基类与通常的实现类似,只是我们将其定义为一个抽象类(如果实例化基类是合法的,那么您也可以像定义常规单例一样定义它) 任何子类型都有自己的instance方法(不能重写静态方法)。例如:
public class Dog extends Animal{
protected Dog(){}
public static Animal theInstance(){
if (instance == null){
instance = new Dog();
}
return instance;
}
@Override
void speak() {
System.out.println("Wouf");
}
}
在主类中,您将编写Dog.theInstance()
,任何后续客户端都将调用Animal.theInstance()
。这样,客户机可以完全独立于派生类,并且您可以添加新的子类,而无需重新编译客户机(开-闭原则)
public class Dog extends Animal{
protected Dog(){}
public static Animal theInstance(){
if (instance == null){
instance = new Dog();
}
return instance;
}
@Override
void speak() {
System.out.println("Wouf");
}
}