Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 这是什么:对象持有相同对象的静态列表,但被强制转换到接口?_Oop_Design Patterns_Collections_Interface_Static - Fatal编程技术网

Oop 这是什么:对象持有相同对象的静态列表,但被强制转换到接口?

Oop 这是什么:对象持有相同对象的静态列表,但被强制转换到接口?,oop,design-patterns,collections,interface,static,Oop,Design Patterns,Collections,Interface,Static,我不止一次地遇到了主题中提到的情况,现在我想在这里询问 其他观点、提示、解释,为什么某人应该/将会/做这样的事情: public class Pool { private static int MAX_ELEMS = 10; private static List<Object> instances; private static void initialise() { if(instances == null) {

我不止一次地遇到了主题中提到的情况,现在我想在这里询问
其他观点、提示、解释,为什么某人应该/将会/做这样的事情:

public class Pool
{
    private static int MAX_ELEMS = 10;

    private static List<Object> instances;

    private static void initialise()
    {
        if(instances == null) {
             instances = new ArrayList<Object>();
             // Initialise all the objects in the list.
        }
    }

    public static Object getInstance(String key)
    {
        for(Object instance : instances) {
             if(instance.equals(key)) { // Just an example
                  return instance;
             }
        }
    }
}
有一个类
A
的对象,它实现接口
I_1o

此对象有一个静态成员,一个集合,由接口
I_1
键入

A
有一个接口实现的方法,称为
get\u instance(key params)
。 它在集合中查找符合键参数的指定对象,并返回 相关对象

这个(设计模式,随便什么)有名字吗?有理由吗?有“最佳实践”的解释吗?为什么它看起来是一个单例,但另一方面它不是,只是递归对象


如果没有人理解我的意思,请告诉我,我会尽力澄清。

这看起来像注册表或标识映射。

这听起来非常像
对象池设计模式。文件

这看起来像这样:

public class Pool
{
    private static int MAX_ELEMS = 10;

    private static List<Object> instances;

    private static void initialise()
    {
        if(instances == null) {
             instances = new ArrayList<Object>();
             // Initialise all the objects in the list.
        }
    }

    public static Object getInstance(String key)
    {
        for(Object instance : instances) {
             if(instance.equals(key)) { // Just an example
                  return instance;
             }
        }
    }
}
公共类池
{
私有静态int MAX_ELEMS=10;
私有静态列表实例;
私有静态void初始化()
{
if(实例==null){
实例=新的ArrayList();
//初始化列表中的所有对象。
}
}
公共静态对象getInstance(字符串键)
{
例如(对象实例:实例){
if(instance.equals(key)){//只是一个例子
返回实例;
}
}
}
}

这种设计模式的原因是为了避免昂贵的对象重新实例化。例如,如果您有一个服务器连接对象的负载,并且希望限制到服务器的连接数量,那么您可以实现这样的模式。这意味着一次存在的对象不超过
MAX_ELEMS
,也意味着它们不是在程序使用期间创建的;它们是在程序中的某个加载期间生成的。

我不知道,这就是我问的原因。:-)Thx,这很有帮助。签名作为答案。