首页 > 试题广场 >

【编程题】请设计一个类,该类在同一个进程中只能由一个实例,且

[问答题]

【编程题】请设计一个类,该类在同一个进程中只能由一个实例,且该实例允许外部访问。

using System;
using System.Collections.Generic;
namespace Test
{
   public class Player
   {
      public string name;
      public string gender;
   public static Player GetInstance()
   {
      if(_instance==null)
      {
         _instance=new Player();         
      }
         return _instance;
   }
private Player()
{

}

private static Player _instance;

}
class Program
{
static void Main(string[] args)
{
Player p=Player.GetInstace();
p.name="张三";
p.gender="男";
}
}
}

发表于 2018-09-17 11:46:38 回复(0)
class A
{
private:
A(){}
static A* a;
public:
static A* geta()
{
if(a==null)
{
a=new A();
return a;
}
}
}
编辑于 2018-08-25 09:37:34 回复(0)
我搜集了一下网上的解答:
设计一个类 只能生成该类的一个实例:只能生成一个实例的类是实现了单例模式的类型。
解题思路:
1.必须把构造函数设为私有函数,防止他人创建实例。

2.在类中创建静态私有的实例,在需要时创建该实例,直到程序结束才销毁。

3.提供一个静态的公有的函数用于创建/获取静态私有对象。

在系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘,需要用到单例模式。
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。

public class Singleton {

    private static Singleton uniqueInstance = null;

 

    private Singleton() {

       // Exists only to defeat instantiation.

    }

 

    public static Singleton getInstance() {

       if (uniqueInstance == null) {

           uniqueInstance = new Singleton();

       }

       return uniqueInstance;

    }

    // Other methods...

}


发表于 2019-03-13 09:08:15 回复(0)
class singleA{
 private static  singleA test=null;
private singleA(){}

public static singleA getInstance(){
if(test==null){
synchronized(singleA.class){
if(test==null){
test=new singleA();
}
}
return test;

}


发表于 2018-08-08 11:52:26 回复(0)
饿汉模式:
class A{
    private static A a = new A();
    private A(){
        
    }
    public static A getInstance(){
        return a;
    }
}
懒汉模式:

class A{
 private static A a=null;
 
 private A(){ }

 public synchronized static A getInstance(){
    if(a == null){
       a = new A();
    }
  
    return a;
 }
}



发表于 2019-10-07 02:17:37 回复(0)
class MyClass
{
public:
    static MyClass& getInstance() {
        static MyClass ins;
        return ins;
    }
private:
    MyClass() = default;
    ~MyClass() = default;
    MyClass& operator=(const MyClass&) = delete;
    MyClass(const Singleton& other) = delete;
};

发表于 2020-07-22 15:22:27 回复(0)
<p>。</p>
发表于 2020-07-25 08:59:40 回复(0)
单例 饿汉式 进来就创建 构造函数 提供get方法
发表于 2019-10-11 10:00:14 回复(0)
 
发表于 2018-09-08 14:06:41 回复(0)
package singletonclass;
 
public class SingletoClass {
    public static SingletoClass  ONLY ; //保存唯一的实例
    
    private SingletoClass(){
        
    }
    //提供一个全局的访问点
    public static SingletoClass getInstance(){
        if(ONLY==null){
            ONLY  = new SingletoClass();
        }
        return ONLY;
    }
    
    public void test(){
        System.out.println("哈哈");
    }
}
 
 
package singletonclass;
 
public class Main {
    public static void main(String args[]) {
        
        SingletoClass single1 = SingletoClass.getInstance();
        SingletoClass single2 = SingletoClass.getInstance();
        System.out.println(single1==single2);
        single1.test();
    }
}


发表于 2018-08-27 18:26:06 回复(3)
public class Singleton {
    // 使用 transient 关键字防止反序列化
    private volatile transient Singleton instance = null;
 
    private Singleton(){}
 
    public static Singleton getInstance() {
        if(instance == null) {
            // 当多个线程在此竞争锁时,仅有一个线程获取到锁执行临界区代码
            synchronized(Singleton.class) {
                // 第二次检查,避免多个线程进入后反复初始化,违背单例模式
                if(instance == null) {
                  // 当第一个获取到锁的线程执行到此时,为了避免指令重排序造成未初始化完成就返回实例,
                  // 此时实例判断不为 null,其他线程可能返回一个未初始化的实例,所以使用 volatile 关键字防止指令重排。
                  instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

发表于 2018-07-30 20:32:58 回复(0)
public class str
{
    private str ()
        {}
    private static str instan;
    public static str getInstance()
    {
           if(instan==NULL)
            { 
                    instan=new str() ;
              }
            return instan;
    }
}
发表于 2018-07-28 19:28:07 回复(0)
public class Class{
  private Class(){}
  private static Class c=new Class();
  public Class getC(){
      return c;
}

public static void main(String [] args){
   Class.getC.toString();
}
}
发表于 2018-07-25 16:17:51 回复(0)
 22
发表于 2018-07-23 11:06:19 回复(0)
public class Singleton{
    private static Singleton instance = new Singleton();
    public static Singleton getInstance(){
         return instance;
    }
}

发表于 2018-07-19 21:08:45 回复(1)
package singleton;

public class God {          private static God god=new God();     private String name="上帝";     private String gender="男";          private God() {}          public static God newInstance() {         return god;     }     public String getName() {         return name;     }     public String getGender() {         return gender;     }  }


package singleton;

public class GodTest {     public static void main(String[] args) {         God god1 = God.newInstance();         God god2 = God.newInstance();                  System.out.println(god1.getName());    //上帝         System.out.println(god1==god2);        //true     }

}

发表于 2018-07-19 17:01:25 回复(0)