设计模式:Registry of Singleton模式

本文介绍了Registry of Singleton模式,作为Creational模式的一种,探讨了如何在单例模式的基础上,根据不同情况灵活获取不同实例,避免每次需要时修改单例类的问题。文章提到了使用Java反射实现的可能性,并指出在无反射特性的语言中可能需要依赖继承来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://leihuang.org/2014/12/05/registry-of-singleton/

Creational 模式

物件的产生需要消耗系统资源,所以如何有效率的产生、管理 与操作物件,一直都是值得讨论的课题, Creational 模式即与物件的建立相关,在这个分类下的模式给出了一些指导原则及设计的方向。下面列举到的全属于Creational 模式


上一篇博客中我们讲了单例模式,我们注意到其构造方法全部声明为private访问权限,也就意味着它不能有子类,不能有其它类继承getInstance()方法,那么这样会导致什么问题呢?

假如我们要通过singleton类根据不同的情况,得到不同的实例,代码如下

public class Singleton {
    private static Singleton instance = null;
    private Singleton() {
    }

    public static Singleton getInstance(String name) {
        if (instance == null) {

            if (name.equals("child1"))
                instance = new ChildSingleton1();
            else if (name.equals("child2r"))
                instance = new ChildSingleton2();
            else
                instance = new Singleton();
        }
        return instance;
    }
}

也就是说,每当我们需要利用到单例模式的时候,我们都需要修改一次我们的单例类,这显然违背了面向对象的设计思想,此时我们就可以利用java中的反射来实现,这一需求.

public class Singleton {
    private static Singleton instance = null;
    private Singleton() {
    }

    public static Singleton getInstance(String name) {
        if (instance == null) {
            try {
                instance = (Singleton)Class.forName(name).newInstance();
            }
            catch(Exception e) {
                e.printStackTrace();
            }
        }
        return instance;
    }
}

当然有些语言是没有反射的性质的,那么就需要用到,继承了.这里不细讲.


2014-12-05 21:31:31

Brave,Happy,Thanksgiving !


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值