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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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
Design patterns OOPS(设计模式)_Design Patterns_Oop_Architectural Patterns - Fatal编程技术网

Design patterns OOPS(设计模式)

Design patterns OOPS(设计模式),design-patterns,oop,architectural-patterns,Design Patterns,Oop,Architectural Patterns,嘿,嗨,我想限制对象创建意味着一个类最多可以有4个对象,但不超过4个。如何实现这一点?一种方法是使用对象工厂,最多创建4个实例。这是一个有趣的需要。。。对象池会满足同样的需求吗?您可以通过使用静态类属性存储计数来计算创建的实例数。这可以在类构造函数中完成,也可以使用工厂模式。在不了解目标语言的情况下,要更准确地回答这个问题有点困难。尝试修改单例模式。可以使用计数变量。要控制实例的数量,您需要将构造函数保持私有状态。最简单的方法是使用名为“count”的类级属性,并且在构造函数中,只需确保“cou

嘿,嗨,我想限制对象创建意味着一个类最多可以有4个对象,但不超过4个。如何实现这一点?

一种方法是使用对象工厂,最多创建4个实例。这是一个有趣的需要。。。对象池会满足同样的需求吗?

您可以通过使用静态类属性存储计数来计算创建的实例数。这可以在类构造函数中完成,也可以使用工厂模式。在不了解目标语言的情况下,要更准确地回答这个问题有点困难。

尝试修改单例模式。可以使用计数变量。要控制实例的数量,您需要将构造函数保持私有状态。

最简单的方法是使用名为“count”的类级属性,并且在构造函数中,只需确保“count”不超过某个数字

//pseudocode
class foo
  static count = 0

  def constructor()
    if count < 4
      //create object
    else
      //there are too many!
//伪代码
福班
静态计数=0
def构造函数()
如果计数小于4
//创建对象
其他的
//太多了!

实现的一种方法是单例设计模式, 每当我们调用创建实例时,请检查已创建实例的计数,如果实例计数已达到4,则将同一实例用于应用程序。
要进行计数,请创建静态Int计数器=0;并不断增加它以获得结果。

这是短代码snippest,将在c中给出上述结果#

sealed class clsInstance
{
公共静态整数计数=0;
私有静态只读clsInstance inst=新clsInstance();
clsInstance()
{
}
公共静态校准仪
{
得到
{
如果(计数<4)
{
Console.WriteLine(“对象:+count”);
计数++;
返回仪表;
}
返回null;
}
}
}
类主类
{
公共静态void Main(字符串[]args)
{
clsInstance c1=clsInstance.Inst;
clsInstance c2=clsInstance.Inst;
clsInstance c3=clsInstance.Inst;
clsInstance c4=clsInstance.Inst;
Console.ReadLine();
clsInstance c5=clsInstance.Inst;
Console.ReadLine();
}
}

它取决于语言。你对哪种语言感兴趣?值得一读Steve Yegge对单例模式的谴责,看看这些警告是否适用于你:你的类的客户不应该知道该类的实例是有限的。首先,这使得单元测试变得更加困难。你到底想完成什么?对于第五个对象实例的请求,行为应该是什么?+1对于有限的工厂和对象池。一个带有对象池或缓存的工厂类是一种方法。在这种情况下,每个对象都有自己的计数副本,这永远是0。count变量需要是静态的。它是伪代码,不需要是完美的。但至少本质应该是正确的(就像现在一样),该变量称为MultiTon:)
sealed class clsInstance
    {
        public static int count = 0;
        private static readonly clsInstance inst = new clsInstance();
        clsInstance()
        {

        }

        public static clsInstance Inst
        {
            get
            {
                if (count < 4)
                {

                    Console.WriteLine("object : " + count);
                    count++;
                    return inst;
                }
                return null;
            }
        }


    }

   class MainClass
   {
       public static void Main(String[] args)
       {
           clsInstance c1 = clsInstance.Inst;
           clsInstance c2 = clsInstance.Inst;
           clsInstance c3 = clsInstance.Inst;
           clsInstance c4 = clsInstance.Inst;
           Console.ReadLine();
           clsInstance c5 = clsInstance.Inst;
           Console.ReadLine();
       }
   }