我的这个单例模式有什么问题?

问题描述

publicclassMyGame{privatestaticMyGamemyGame;privateArrayList<Game>participateGame;privateArrayList<Game>organizeGame;privateMyGame(ArrayList<Game>orgGameList,ArrayList<Game>parGameList){System.out.println("MyGamecontruct");organizeGame=orgGameList;participateGame=parGameList;}publicstaticMyGamegetMyGame(){if(myGame==null){System.out.println("myGame==null");ArrayList<Game>org=newArrayList<Game>();ArrayList<Game>par=newArrayList<Game>();myGame=newMyGame(org,par);}System.out.println("retrunmyGame");returnmyGame;}publicArrayList<Game>getParticipateGame(){returnparticipateGame;}publicvoidsetParticipateGame(ArrayList<Game>participateGame){this.participateGame=participateGame;}publicArrayList<Game>getOrganizeGame(){System.out.println("getOrganizedGame");if(organizeGame==null){System.out.println("organizeGame==null");}returnorganizeGame;}publicvoidsetOrganizeGame(ArrayList<Game>organizeGame){this.organizeGame=organizeGame;}}为啥我通过方法getOrganziedGame()为空?

解决方案

解决方案二:
importjava.util.*;classGame{}publicclassMyGame{privatestaticMyGamemyGame;privateArrayList<Game>participateGame;privateArrayList<Game>organizeGame;privateMyGame(ArrayList<Game>orgGameList,ArrayList<Game>parGameList){System.out.println("MyGamecontruct");organizeGame=orgGameList;participateGame=parGameList;}publicstaticMyGamegetMyGame(){if(myGame==null){System.out.println("myGame==null");ArrayList<Game>org=newArrayList<Game>();ArrayList<Game>par=newArrayList<Game>();myGame=newMyGame(org,par);}System.out.println("retrunmyGame");returnmyGame;}publicArrayList<Game>getParticipateGame(){returnparticipateGame;}publicvoidsetParticipateGame(ArrayList<Game>participateGame){this.participateGame=participateGame;}publicArrayList<Game>getOrganizeGame(){System.out.println("getOrganizedGame");if(organizeGame==null){System.out.println("organizeGame==null");}returnorganizeGame;}publicvoidsetOrganizeGame(ArrayList<Game>organizeGame){this.organizeGame=organizeGame;}publicstaticvoidmain(String[]args){System.out.println("--------"+MyGame.getMyGame().getOrganizeGame());}}

输出为myGame==nullMyGamecontructretrunmyGamegetOrganizedGame--------[]//可以看到organizedGame不为null

解决方案三:
你是直接调的getOrganziedGame这个方法吧,你这代码是在getgetMyGame里面赋值的;2楼的调用放大才是正确的。

时间: 2024-09-16 05:13:12

我的这个单例模式有什么问题?的相关文章

scala实现单例模式

单例模式介绍 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例. 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号)生成器.如在Windows中就只能打开一个任务管理器.如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源:

io-dom4j中因为输出流未正确关闭,导致再次获取单例模式的document时,对象为null

问题描述 dom4j中因为输出流未正确关闭,导致再次获取单例模式的document时,对象为null 一:如下是获取单例模式的document对象. private static Document returndoc(Document docuname, String xmlname) { if (docuname != null) { return docuname; } SAXReader reader = new SAXReader(); // 如果不存在就创建对象. try { docu

[设计模式实践之路](1)单例模式

[简介] 单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点.      实现单例模式的一个最好的方法就是让类自身负责保存它的唯一实例.这个类可以保证没有其他实例可以创建,并且它可以提供一个访问该实例的方法. [特点] 单例模式具有一下特点: 单例类只有一个实例 单例类必须自己创建自己的唯一实例 单例类必须给所有其他对象提供这一实例 [分类] 主要的就是懒汉单例,饿汉单例 [懒汉单例] package Mode; /** * Java设计模式之单例模式 * @au

C# 单例模式的五种写法

C# 单例模式的五种写法及优劣分析,见下文: [单例模式及常见写法](http://blog.csdn.net/jiankunking/article/details/50867050)

如何正确地写出单例模式

单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧.但是其中的坑却不少,所以也常作为面试题来考.本文主要对几种单例写法的整理,并分析其优缺点.很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你. 懒汉式,线程不安全 当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的. public class Singleton { private static Singleton instan

减小内存的占用问题——享元模式和单例模式的对比分析

俗话说,自己写的代码,6个月后也是别人的代码--复习!复习!复习!总结的知识点如下: 享元模式概念和实现例子 使用了享元模式的Java API String类 java.lang.Integer 的 valueOf(int)方法源码分析 使用享元模式的条件 享元模式和单例模式的区别 前面的策略模式的话题提起了:如何解决策略类膨胀的问题,说到 "有时候可以通过把依赖于环境Context类的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用."换言之,可以使

PHP单例模式实现商城购物车功能-PHP实例教程

  PHP单例模式实现商城购物车功能-PHP实例教程完成这个小功能必须会写需求 养成好的习惯 Php购物车的开发需求功能如下 1: 购物车放在session里 2: 单例模式来开发 功能: 增删改查 增一个商品 减少 PHP单例模式实现商城购物车功能-PHP实例教程完成这个小功能必须会写需求 养成好的习惯 Php购物车的开发需求功能如下:php100.com 1: 购物车放在session里 2: 单例模式来开发 功能: 增删改查 增一个商品 减少一个商品(改,数量) 删 去掉一个商品 清空购物

php设计模式之单例模式(单元素模式)

单例模式: 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. (1). 需要一个保存类的唯一实例的静态成员变量:private static $_instance; (2). 构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义: private function __construct() { $this->_db = pg_connect('xxxx')

PHP的单例模式的一个实例

这篇文章对于PHP单例模式的解释并不一定完善!只是举一个实例而已,目的是让我自己通过一个实例可以加深对单例模式的理解!在此,仅供参考! 单例:可以简单的理解是通过一个类,只能实例化单个对象,不能实例化多个对象! class e { public $uname; static $obj = NULL; //定义一个静态属性 private function __construct() { //在构造方法前使用private属性,目的是不能在类的外部实例化对象, //即不能$a=new e(); }

Php面向对象 – 单例模式

Php面向对象 – 单例模式 保证类只有一个实例 1. 如何可以解决一个类可以被无限地实例化? New,就能实例化一次,怎么去限制,用户不能无限次地new? 将构造方法私有化.所有外部的new都操作失败 class MySQLDB { private function __construct() { } } 2. 一旦构造方法私有化,意味着类不能再类外实例化.但可以在类内实例化. 增加一个公共的静态方法,通过类来调用该方法,在方法内可以执行new操作. class MySQLDB { priva