Java中单态设计模式
Java中单态设计模式
2011-09-23 16:38:46| 分类: Java | 标签:technology! |举报|字号 订阅
此博文是转自新浪博客中一名叫做"俊俊的BLOG“用户的一篇博文。感觉此博文确实很不错,所以在此拿出来分享一下!(笔者只是对其所举的代码略做了一些修改)
一概念:
设计模式:设计模式是指经过大量的实践总结和理论化之后的优选的代码结构、编程风格、以及解决问题的思路。
单态设计模式:采取一定的方法保证在整个软件系统中,对某个类只能产生一个对象实例,并且该类只提供一个取得其对象的实例方法。
二实现:
在java中实现单态模式只需要执行以下三步:
1.将构造函数声明为private。这样就只能在该类的内部生成对象,而不能在外部通过new来产生对象。
2.在类内部生成一个静态的实例。
3.提供一个静态的方法用于外部取得该类的实例。
三举例:
class Chinese {
static Chinese chinese = new Chinese();
private Chinese(){
}
public static Chinese getInstance() {
return chinese;
}
}
改进:
class Chinese {
static Chinese chinese = null;
private Chinese() {
}
public static Chinese getInstance() {
if (chinese == null) {
chinese = new Chinese();
}
return chinese;
}
}
这是网上找来的资料;
下面是自己编写的程序代码:
package mypkg ;
class Single {
static Single ref = null; //= new Single();//因为要保证静态函数getInstance()能调用该变量ref,所以必需设置成static。
private Single(){ //设置成private的目的是防止外部调用生成其它对象
System.out.println("hao");
}
public static Single getInstance(){//为了使外面的函数生产Single对象,只有通过此函数才能生产,所以它必需是public和static
if(ref == null){
ref = new Single();
}
return ref;
}
}
class Other {
public static int i = 0;
public Other() {
System.out.println("Form i=" + (++i));
}
public static Other getOther() {
return (new Other());
}
}
public class testSingle {
public static int i = 0;
public static void main(String[] args) {
Single obj1 = Single.getInstance();
Single obj2 = Single.getInstance();
Single obj3 = Single.getInstance();
Other ob1 = Other.getOther();
Other ob2 = Other.getOther();
System.out.println((obj1 == obj2) && (obj2 == obj3) && (obj1 == obj3));
System.out.println("******\n" + (ob1 == ob2));
}
}
其执行结果是:
hao
Form i=1
Form i=2
true
******
false
可以看出,单态设计模式中只生产一个对象,obj1、obj2、obj3都是同一个对象,故结果中只输出一次 hao。而非单态模式可以生产很多的对象,如ob1和ob2就是2个不同的对象。
http://liuxiaowei199001.blog.163.com/blog/static/193805325201182343020758/
Java中单态设计模式的更多相关文章
- Java中的设计模式之单例模式
Java中的单例模式 设计模式是软件开发过程中经验的积累 一.单例模式 1.单例模式是一种常用的软件设计模式,通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控 ...
- Java中常见设计模式面试
一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...
- 7.JAVA基础复习——JAVA中的设计模式单例模式
设计模式:是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 总体来说设计模式分为23种三大类: 创建型模式,共 ...
- java中的设计模式及其六大原则
设计模式分类: 一共分为3大类:创造型模式.结构型模式.行为型模式. 创造型模式:工厂方法(FactoryMethod).抽象工厂模式(AbstractFactory).建造者模式(Builder). ...
- Java中的设计模式
1 单例模式和多例模式 一.单例模式和多例模式说明:1. 单例模式和多例模式属于对象模式.2. 单例模式的对象在整个系统中只有一份,多例模式可以有多个实例.(单例只会创 ...
- JAVA中的设计模式二(工厂模式)
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类. 工厂模式主要有: 简单工厂模式,工厂方法,抽象工厂: 简单工厂: 又叫静态工厂,是工厂模式三中状态中结构最为简单的.主 ...
- JAVA中的设计模式一(单例模式)
单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个 ...
- JAVA中的设计模式三(策略模式)
问题: 如何让算法和对象分开来,使得算法可以独立于使用它的客户而变化? 方案: 把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就 ...
- java中的设计模式一 装饰模式
1.装饰模式(Decorator)的定义:又名包装(Wrapper)模式,装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 2.装饰模式以对客户端透明的方式动态的给一个对象附加上 ...
随机推荐
- [LeetCode][Python]Tow Sum
# -*- coding: utf8 -*-'''https://oj.leetcode.com/problems/two-sum/ Given an array of integers, find ...
- md笔记——HTTP知识
HTTP权威指南 ******** 第一部分:HTTP:Web 的基础 第一章:HTTP概述 MIME 因特网上有数千种不同的数据类型,HTTP 仔细地给每种要通过 Web 传输的对象都打上了名为 M ...
- JavaScript奇技淫巧45招
JavaScript奇技淫巧45招 撰写于 2015年1月5日 修改于 2016年6月16日 分类 翻译 标签 JavaScript 本文是一篇翻译文章,原文信息如下: 原文:45 Useful Ja ...
- 2014.8.20break,continue,字符串,数字和日期
(一)break与continue break——彻底终断循环 continue——中断本次循环,继续下次循环 break举例: //求100以内所有质数 ; i <= ; i++) { ;// ...
- 【攻防实战】SQL注入演练!
这篇文章目的是让初学者利用SQL注入技术来解决他们面临的问题, 成功的使用它们,并在这种攻击中保护自己. 1.0 介绍 当一台机器只打开了80端口, 你最依赖的漏洞扫描器也不能返回任何有用的内容, 并 ...
- python 备份脚本
import osimport timesource= r"out_res.txt"target_dir= r"F:\python\Doc"target=tar ...
- Nio Client
public class NIOClient { static int SIZE = 2; final static int bufferSize = 500 * 1024; static InetS ...
- textContent和innerHtml
textContent,innerText, 查询或者设置元素的文本内容. textContent如,html: <p>test gogo</p> javascript中: v ...
- Hive学习之更改表的属性
1.修改表名 alter table table_name rename to new_table_name;2.修改列名 alter table tablename change col ...
- JQ兼容性问题
checkbox操作 1:设置为选中状态 $(this).prop("checked", true); 2:判断是否选中 $(this).is(":check ...