`
zhuyufufu
  • 浏览: 138847 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
阅读更多
  SigleTon模式可能是最为软件从业人员所知的一种模式了。但是与其有异曲同工之妙的MonoState模式则不那么流行了。

   在介绍MonoState之前先说一下SingleTon。SingleTon在静态存储区存储了自己的一个实例,这个实例持有业务需要的内容(也就是实例的属性)。通过对构造器的私有化,以及对克隆的限制达到控制单例实例数为一的目的。扩展开来SigleTon不仅可以控制单例实例数为一,也可以控制实例数为二、为三直至n,也就是说可以控制实例数为固定数目。

   单例的单元测试代码:
package com.zas.pattern.test;

import static org.junit.Assert.*;

import java.lang.reflect.Constructor;

import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.zas.pattern.SingleTon;

/**
 * 单例模式测试
 * @author zas
 *
 */
public class SingleTonTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void testNewInstance() {
		SingleTon s = SingleTon.newInstance();
		SingleTon s2 = SingleTon.newInstance();
		assertSame(s, s2);
	}
	
	@Test
	public void testNoConstructor() {
		try {
			Class<?> singleTonClass = Class.forName("com.zas.pattern.SingleTon");
			Constructor<?>[] construtors = singleTonClass.getConstructors();
			assertEquals("没有公共构造器", 0, construtors.length);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void testNoClone() {
		SingleTon s = SingleTon.newInstance();
		try {
			Object obj = s.clone();
			if(obj instanceof CloneNotSupportedException){
				assertTrue(true);
			}else{
				fail();
			}
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
	}

}


单例代码
package com.zas.pattern;

/**
 * 单例模式
 * @author zas
 */
public class SingleTon {
	
	//静态存储区存储的是单例的类
	private static SingleTon singleTon;
	
	//单例内容的内容
	private String content;
	
	private SingleTon() {
		content = "初始化单例类内容";
	}
	
	public static SingleTon newInstance() {
		if(null == singleTon){
			singleTon = new SingleTon();
		}
		return singleTon;
	}
	
	@Override
	public Object clone() throws CloneNotSupportedException {
		return new CloneNotSupportedException();
	}
	
	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {

	}

}


MonoState从另外一个角度实现了内容控制,也就是讲类的属性全部放到静态存储区,这样所有的类实例都共享了属性。每个实例的属性在改变的同时也改变了别的实例的属性。

MonoState单元测试代码
package com.zas.pattern;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class MonoStateTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void test() {
		MonoState monoState = new MonoState();
		assertEquals("初始化单例类内容", monoState.getContent());
	}
	
	@Test
	public void testInstances() {
		MonoState monoState = new MonoState();
		MonoState monoState2 = new MonoState();
		assertEquals(monoState.getContent(), monoState2.getContent());
		monoState.setContent("改变了实例内容");
		assertEquals(monoState.getContent(), monoState2.getContent());
	}
}


MonoState代码
package com.zas.pattern;

/**
 * MonoState 模式
 * @author zas
 */
public class MonoState {
	//类持有的内容
	private static String content = "初始化单例类内容";
	
	public MonoState() {

	}
	
	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		MonoState.content = content;
	}
	
	@Override
	protected Object clone() throws CloneNotSupportedException {
		return new CloneNotSupportedException();
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {

	}

}


Monostate模式的关键就在于类属性的全局共享化。从这个模式也可以看出设计模式是对简单编程思想的合理运用。

具体的工作场景中怎么运用MonoState还需要多多实践。
0
0
分享到:
评论
2 楼 zhuyufufu 2013-12-20  
dieslrae 写道
我楞是看了半天才发现SingleTon是singleton,咱就不能用大家喜闻乐见的方式来写单词么

感谢提醒,已修正了标题中的单词拼写问题。
1 楼 dieslrae 2013-12-20  
我楞是看了半天才发现SingleTon是singleton,咱就不能用大家喜闻乐见的方式来写单词么

相关推荐

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。 **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供一个全局访问点...

    设计模式-Singleton与Factory

    设计模式-Singleton与Factory

    Qt qml Singleton 单例模式

    在Qml中,我们可以通过Qt的Singleton组件来实现这一模式。 首先,让我们理解单例模式的基本概念。在软件工程中,单例模式保证一个类只有一个实例,并提供一个全局访问点。这个设计模式在许多场景下都很实用,比如...

    设计模式C++学习之单例模式(Singleton)

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式有多种方法,我们将会深入探讨这一模式的原理、优缺点以及如何在实际编程中应用。 单例模式的核心在于...

    (创建型模式)Singleton模式

    Singleton模式是设计模式中的一种创建型模式,它在软件工程中扮演着重要的角色。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一的实例。Singleton模式的应用场景通常涉及到系统...

    最简单的设计模式学习Singleton模式

    ### 最简单的设计模式学习:Singleton模式 #### 一、Singleton模式简介 Singleton(单例)模式是一种常用的软件设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在许多场合下非常...

    C#设计模式之Singleton模式

    《C#设计模式之Singleton模式详解》 Singleton模式是软件设计模式中的一种基础模式,它在众多设计模式中占有重要地位,尤其在C#编程中经常被应用。Singleton模式的主要目的是确保一个类只有一个实例,并提供一个...

    [创建型模式] head first 设计模式之单件模式(Singleton)

    **单例模式(Singleton)**是软件设计模式中的一种创建型模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,例如管理共享资源、配置对象或者数据库连接等。单例...

    单例模式(singleton)

    单例模式是软件设计模式中的一种,它的核心思想是确保一个类在整个系统中只有一个实例,并提供一个全局访问点。在Java或类似编程语言中,单例模式常常被用来管理资源,比如数据库连接、线程池或者配置信息,因为这些...

    设计模式之Singleton

    **设计模式之Singleton(单例模式)** 在软件工程中,设计模式是解决常见问题的模板,它们代表了经过时间考验的最佳实践。Singleton模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点来...

    面向对象设计模式:Singleton 单件(创建型模式)

    李建忠面向对象设计模式视频精讲:Singleton 单件(创建型模式)

    C++完美实现Singleton模式

    ### C++中实现Singleton模式的关键知识点 #### 一、Singleton模式简介 Singleton模式是一种常用的软件设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统中经常被用于控制对共享资源...

    Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现

    单件模式(Singleton pattern)是设计模式中的一种结构型模式,它的主要目的是确保一个类只有一...在C++中,单例模式常常与智能指针(如`std::unique_ptr`或`std::shared_ptr`)结合使用,以更好地管理对象的生命周期。

    Java 单例模式Singleton

    简单的单例模式举例Singleton 分为恶汉式 懒汉式

    C++ 实现的singleton 模式

    **C++实现的Singleton模式详解** Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源,如数据库连接池,或者确保某个...

    设计模式之Singleton(单态)

    5. **生命周期管理**:在某些容器(如Spring框架)中,Singleton模式的生命周期可能与容器的生命周期冲突,需要谨慎使用。 6. **扩展性**:Singleton模式可能导致系统不易扩展,因为它限制了类的实例化,可能阻碍了...

    设计模式 之 “单例模式[Singleton Pattern]”

    **单例模式(Singleton Pattern)**是软件设计模式中的一种...总之,单例模式是一种常见的设计模式,理解其原理和实现方式对提高代码质量与性能有着重要作用。在使用时,应结合具体场景和需求,选择最适合的实现策略。

    创建型模式之单例模式(Singleton Pattern)

    单例模式是软件设计模式中的一种,属于创建型模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源、配置对象或者缓存服务等。 单例模式的核心...

    大话设计模式--Singleton(单例模式)

    单例模式是软件设计模式中的一种经典模式,它在许多场景下被广泛使用,尤其是在需要全局唯一实例的情况下。本文将深入探讨单例模式的概念、作用、实现方式以及其在实际编程中的应用。 单例模式的核心思想是确保一个...

Global site tag (gtag.js) - Google Analytics