日期:2014-05-18  浏览次数:21082 次

保证一个类无法在外部被实例化的三种方法,哪种更加好?
保证一个类无法在外部被实例化的三种方法,哪种更加好?
哪一种从逻辑上更说的过去。
谢谢各位。
C# code

    //1.单实例,构造函数是私有的,无法在外部new
    public class Manager
    {
        private Manager()
        {
        }

        private static readonly Manager _Instance = new Manager();

        public static Manager Instance
        {
            get
            {
                return _Instance;
            }
        }

        private string _Name;
        public string Name
        {
            get
            {
                return _Name;
            }
            set
            {
                _Name = value;
            }
        }

        public void Buy()
        {
        }
    }

   //2.静态类,无法被实例化
    public static class Manager
    {
        private static string _Name;
        public static string Name
        {
            get
            {
                return _Name;
            }
            set
            {
                _Name = value;
            }
        }

        public static void Buy()
        {
        }
    }

    //3.抽象类,无法被实例化
    public abstract class Manager
    {
        private static string _Name;
        public static string Name
        {
            get
            {
                return _Name;
            }
            set
            {
                _Name = value;
            }
        }

        public static void Buy()
        {
        }
    }




------解决方案--------------------
楼下回答 帮你顶上去
------解决方案--------------------
看需要。
如果提供的都是静态方法。那就用静态类,如果是单利模式,就private构造函数,提供一个静态的Instance属性。如果不希望别人实例化,做成抽象类实在是乱来了。
------解决方案--------------------
探讨
看需要。
如果提供的都是静态方法。那就用静态类,如果是单利模式,就private构造函数,提供一个静态的Instance属性。如果不希望别人实例化,做成抽象类实在是乱来了。

------解决方案--------------------
如果没有必要“保证”,那么去保证就是闲得太多了。设计模式的某个就有这个毛病。
------解决方案--------------------
探讨
看需要。
如果提供的都是静态方法。那就用静态类,如果是单利模式,就private构造函数,提供一个静态的Instance属性。如果不希望别人实例化,做成抽象类实在是乱来了。

------解决方案--------------------
但是他是从设计模式就是法律的角度,去强调“保证”。而我要问的是,允许new一个实例(尽管懂得的人都知道不用new而直接调用static的GetInstance方法就行),碍谁蛋疼了呢?
------解决方案--------------------
探讨
引用:
看需要。
如果提供的都是静态方法。那就用静态类,如果是单利模式,就private构造函数,提供一个静态的Instance属性。如果不希望别人实例化,做成抽象类实在是乱来了。


设计模式中,搞这样的要求:.ctor必须是private的,以此来“保证”。然后再搞个static的GetInstance方法获得全局唯一的实例。

其实就算new一个……

------解决方案--------------------
探讨
但是他是从设计模式就是法律的角度,去强调“保证”。而我要问的是,允许new一个实例(尽管懂得的人都知道不用new而直接调用static的GetInstance方法就行),碍谁蛋疼了呢?

------解决方案--------------------
看需要吧,没有什么绝对的好与坏!
------解决方案--------------------
学习下
------解决方案--------------------
C# code

    public class Manager
    {
        public static Manager GetInstance = new Manager();
        private Manager()
        {
        }
    }

------解决方案--------------------
看情况
------解决方案--------------------
学习。
------解决方案--------------------