Jay*_*Jay 1 java oop singleton design-patterns
我想创建一组共享许多常见行为的类.当然在OOP中你认为你自动认为"带有子类的抽象类".但是我希望这些类要做的事情是每个类都有一个静态的类实例列表.该列表应该在类中作为单个类的一种运行.我的意思是每个子类都有一个单例,而不是它们共享一个."Singleton"到那个子类,而不是一个真正的单例.但如果它是静态的,我该如何继承呢?
当然这样的代码不起作用:
public abstract A
{
static List<A> myList;
public static List getList()
{
if (myList==null)
myList=new ArrayList<A>(10);
return myList;
}
public static A getSomethingFromList()
{
List listInstance=getList();
... do stuff with list ...
}
public int getSomethingFromA()
{
... regular code acting against current instance ...
}
}
public class A1 extends A
{
...
}
public class A2 extends A
{
...
}
A1 somethingfromA1List=(A1) A1.getSomethingFromList();
A2 somethingfromA2List=(A2) A2.getSomethingFromList();
Run Code Online (Sandbox Code Playgroud)
每个子类的列表内容都不同,但列表上的所有代码都是相同的.
上面代码的问题是我只有一个列表用于所有子类,我想要一个列表.是的,我可以复制代码来在每个子类中声明静态列表,但是我还必须复制添加到列表中的所有代码并搜索列表等,这相当违背了子类化的目的.
有关如何在不复制代码的情况下执行此操作的任何想法?
更新
为了澄清BlueRaja以及其他人,让我对我正在尝试做的事情稍微具体一点.
我有许多需要类似行为的状态和代码.它们就像枚举一样,我希望每个可能的代码状态都有类型安全的实例,但是它们有多个集合,所以我不能只为它们制作一个枚举.
例如,我有订单状态,它具有按订单,已发货,已收货和某些特殊值的值.我有项目类型,商品与服务的价值.我有股票与定制.等等.
如果这就是它的全部内容我只会为每个人制作一个枚举.但是我还需要其他行为,例如通过文本值查找对象的能力,例如当我们从数据库中读取它时; 建立一个下拉列表,通过文字描述列出所有选择; 据我所知,我不能用枚举来做这个,因为我有几组代码,每个代码都有我想要继承的常见行为,而且我不能继承枚举.将所有代码放在单个枚举中将放弃一个代码与另一个代码的类型安全性,并且证明没有现成的方法来收集特定代码类型的值列表.
您可以static Map<Class, YourClass> = new ConcurrentHashMap<..>()
在父类中使用a 并使用该映射添加/检索实例.
虽然如此大量依赖单身人士听起来像是一个糟糕的设计 - 你应该尽量避免它.