- 浏览: 138847 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
zheng_zhimeng:
这个版本在linux的版本下有问题,亲们用的没有问题么
文档展示:IcePDF 将PDF转换为图片 -
yuming.xiao:
转换的某些图片,有些模糊。不知道楼主遇到这个问题没有
文档展示:IcePDF 将PDF转换为图片 -
zenghongqing:
您好,请教您一个问题://cell内容字符串总宽度 doub ...
Java POI Excel 行高自适应 -
xiang37:
http://xiva.iteye.com/blog/2066 ...
视频分割项目预研 -
I白I:
怎么还配置数据库了?
视频分割项目预研
SigleTon模式可能是最为软件从业人员所知的一种模式了。但是与其有异曲同工之妙的MonoState模式则不那么流行了。
在介绍MonoState之前先说一下SingleTon。SingleTon在静态存储区存储了自己的一个实例,这个实例持有业务需要的内容(也就是实例的属性)。通过对构造器的私有化,以及对克隆的限制达到控制单例实例数为一的目的。扩展开来SigleTon不仅可以控制单例实例数为一,也可以控制实例数为二、为三直至n,也就是说可以控制实例数为固定数目。
单例的单元测试代码:
单例代码
MonoState从另外一个角度实现了内容控制,也就是讲类的属性全部放到静态存储区,这样所有的类实例都共享了属性。每个实例的属性在改变的同时也改变了别的实例的属性。
MonoState单元测试代码
MonoState代码
Monostate模式的关键就在于类属性的全局共享化。从这个模式也可以看出设计模式是对简单编程思想的合理运用。
具体的工作场景中怎么运用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还需要多多实践。
评论
2 楼
zhuyufufu
2013-12-20
dieslrae 写道
我楞是看了半天才发现SingleTon是singleton,咱就不能用大家喜闻乐见的方式来写单词么
感谢提醒,已修正了标题中的单词拼写问题。
1 楼
dieslrae
2013-12-20
我楞是看了半天才发现SingleTon是singleton,咱就不能用大家喜闻乐见的方式来写单词么
发表评论
-
oracle按照某一字段里的数字排序
2014-10-21 19:59 1089select * from LSK_SBCAJ t ord ... -
JS onkeydown onenter
2014-10-20 16:53 1004html中 onenter不是一个标准的事件。 js 中仿o ... -
Java数组删除指定元素
2014-09-18 11:30 2253package com.zas.util; impo ... -
sql 去重
2014-09-18 10:43 639delete from table t1 where t1.i ... -
linux 干掉所有java进程
2014-08-07 12:31 1033ps -ef|grep java|grep -v grep|c ... -
Oracle自带连接池使用(转载收录)
2014-07-31 10:01 1412最近在搞数据迁移:从sql server 迁数据到oracle ... -
html dom jsoup httpclient
2014-07-10 21:45 1114xml dom 对大多数java程序员来说并不陌生,但是htm ... -
Oracle 清库脚本
2014-07-08 22:40 1314清库脚本一份 表dossier_group 的字段Dossi ... -
Java 对象存储到oracle Blob字段
2014-07-08 14:52 1101Java 数据对象在没有持久存储到业务表时,可能需要临时存 ... -
Java 科学计数法数字转字符串
2014-07-08 14:30 1509科学计数法数字转字符串,记录代码,留后使用 double ... -
突破tomcat jsp编译65535行的限制
2014-07-04 17:16 4791使用tomcat时有可能会遇到其对jsp编译行数的限制, ... -
oracle 函数中游标及递归的应用
2014-06-19 17:13 1425在代码中使用递归可能大部分程序员都不陌生,但是在存储过程或 ... -
视频操作类
2014-06-19 17:04 1135接 视频分割项目预研 http://zhuyufufu.i ... -
视频分割项目预研
2014-06-11 16:12 2271由于工作需要,研究下视频切割。 现在的情况:视频切割是重中之 ... -
Java POI Excel 行高自适应
2014-03-28 14:08 15887在Excel处理的过程中,可能有需要用到行高自适应的时候。 ... -
Java POI Excel sheet 合并遇到的问题解决2
2014-03-25 18:03 3247上接 Java POI Excel sheet 合并 http ... -
文档展示:使用iText转换各种图片为PDF
2014-03-23 12:38 2907如题: 下面这段代码可以处理各种格式的图片,代码的出处忘记了 ... -
Java 进程执行外部程序,造成外部程序阻塞的一种原因
2014-03-23 12:06 1466前一阵子在研究文档展示时使用了java进程直接调用外部程序 ... -
Java POI Excel sheet 合并遇到的问题解决
2014-03-23 11:30 5123上接 Java POI Excel sheet http:// ... -
Java POI Excel sheet合并
2014-03-19 10:59 6628由于工作上的需要,特地研究了下Excel合并的问题,现贴出来, ...
相关推荐
这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。 **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供一个全局访问点...
设计模式-Singleton与Factory
在Qml中,我们可以通过Qt的Singleton组件来实现这一模式。 首先,让我们理解单例模式的基本概念。在软件工程中,单例模式保证一个类只有一个实例,并提供一个全局访问点。这个设计模式在许多场景下都很实用,比如...
单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式有多种方法,我们将会深入探讨这一模式的原理、优缺点以及如何在实际编程中应用。 单例模式的核心在于...
Singleton模式是设计模式中的一种创建型模式,它在软件工程中扮演着重要的角色。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一的实例。Singleton模式的应用场景通常涉及到系统...
### 最简单的设计模式学习:Singleton模式 #### 一、Singleton模式简介 Singleton(单例)模式是一种常用的软件设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在许多场合下非常...
《C#设计模式之Singleton模式详解》 Singleton模式是软件设计模式中的一种基础模式,它在众多设计模式中占有重要地位,尤其在C#编程中经常被应用。Singleton模式的主要目的是确保一个类只有一个实例,并提供一个...
**单例模式(Singleton)**是软件设计模式中的一种创建型模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,例如管理共享资源、配置对象或者数据库连接等。单例...
单例模式是软件设计模式中的一种,它的核心思想是确保一个类在整个系统中只有一个实例,并提供一个全局访问点。在Java或类似编程语言中,单例模式常常被用来管理资源,比如数据库连接、线程池或者配置信息,因为这些...
**设计模式之Singleton(单例模式)** 在软件工程中,设计模式是解决常见问题的模板,它们代表了经过时间考验的最佳实践。Singleton模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点来...
李建忠面向对象设计模式视频精讲:Singleton 单件(创建型模式)
### C++中实现Singleton模式的关键知识点 #### 一、Singleton模式简介 Singleton模式是一种常用的软件设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统中经常被用于控制对共享资源...
单件模式(Singleton pattern)是设计模式中的一种结构型模式,它的主要目的是确保一个类只有一...在C++中,单例模式常常与智能指针(如`std::unique_ptr`或`std::shared_ptr`)结合使用,以更好地管理对象的生命周期。
简单的单例模式举例Singleton 分为恶汉式 懒汉式
**C++实现的Singleton模式详解** Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源,如数据库连接池,或者确保某个...
5. **生命周期管理**:在某些容器(如Spring框架)中,Singleton模式的生命周期可能与容器的生命周期冲突,需要谨慎使用。 6. **扩展性**:Singleton模式可能导致系统不易扩展,因为它限制了类的实例化,可能阻碍了...
**单例模式(Singleton Pattern)**是软件设计模式中的一种...总之,单例模式是一种常见的设计模式,理解其原理和实现方式对提高代码质量与性能有着重要作用。在使用时,应结合具体场景和需求,选择最适合的实现策略。
单例模式是软件设计模式中的一种,属于创建型模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源、配置对象或者缓存服务等。 单例模式的核心...
单例模式是软件设计模式中的一种经典模式,它在许多场景下被广泛使用,尤其是在需要全局唯一实例的情况下。本文将深入探讨单例模式的概念、作用、实现方式以及其在实际编程中的应用。 单例模式的核心思想是确保一个...