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中单态设计模式的更多相关文章

  1. Java中的设计模式之单例模式

    Java中的单例模式 设计模式是软件开发过程中经验的积累 一.单例模式 1.单例模式是一种常用的软件设计模式,通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控 ...

  2. Java中常见设计模式面试

    一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...

  3. 7.JAVA基础复习——JAVA中的设计模式单例模式

    设计模式:是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 总体来说设计模式分为23种三大类: 创建型模式,共 ...

  4. java中的设计模式及其六大原则

    设计模式分类: 一共分为3大类:创造型模式.结构型模式.行为型模式. 创造型模式:工厂方法(FactoryMethod).抽象工厂模式(AbstractFactory).建造者模式(Builder). ...

  5. Java中的设计模式

    1 单例模式和多例模式 一.单例模式和多例模式说明:1.         单例模式和多例模式属于对象模式.2.         单例模式的对象在整个系统中只有一份,多例模式可以有多个实例.(单例只会创 ...

  6. JAVA中的设计模式二(工厂模式)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类. 工厂模式主要有: 简单工厂模式,工厂方法,抽象工厂: 简单工厂: 又叫静态工厂,是工厂模式三中状态中结构最为简单的.主 ...

  7. JAVA中的设计模式一(单例模式)

    单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个 ...

  8. JAVA中的设计模式三(策略模式)

    问题: 如何让算法和对象分开来,使得算法可以独立于使用它的客户而变化?   方案: 把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就 ...

  9. java中的设计模式一 装饰模式

    1.装饰模式(Decorator)的定义:又名包装(Wrapper)模式,装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 2.装饰模式以对客户端透明的方式动态的给一个对象附加上 ...

随机推荐

  1. 雕爷牛腩这样判断零售未来-搜狐IT

    雕爷牛腩这样判断零售未来-搜狐IT 雕爷牛腩这样判断零售未来

  2. Delphi XE7中新并行库

    Delphi XE7中添加了新的并行库,和.NET的Task和Parellel相似度99%. 详细内容能够看以下的文章: http://www.delphifeeds.com/go/s/119574 ...

  3. Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式

      相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式> &l ...

  4. UVA 12075 - Counting Triangles(容斥原理计数)

    题目链接:12075 - Counting Triangles 题意:求n * m矩形内,最多能组成几个三角形 这题和UVA 1393类似,把总情况扣去三点共线情况,那么问题转化为求三点共线的情况,对 ...

  5. SQL Server索引进阶:第十二级,创建,修改,删除

    在第十级中我们看到了索引的内部结构,在第十一级中我们看到了平衡树结构潜在的负面影响:索引碎片.有了索引内部结构的知识,我们可以检查在执行数据定义语句和数据操作语句的时候,都发生了什么.在本级中我们介绍 ...

  6. 数据持久化------Archiving(归档,解档)

    其中TRPerson为自定义的继承自NSObject的类的子类  其中有两个属性,name 和 age .h文件 #import @interface TRPerson : NSObject<& ...

  7. 电脑技巧---完全控制面板---上帝模式(God Mode)

    简介 上帝模式,即"God Mode”,或称为“完全控制面板”.是Windows 系统中隐藏的一个简单的文件夹窗口,但包含了几乎所有Windows系统的设置,如控制面板的功能.界面个性化.辅 ...

  8. [Jobdu] 题目1506:求1+2+3+...+n

    题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C).  输入: 输入可能包含多个测试样例. 对于每 ...

  9. LNNVL函数使用

    显示那些佣金比例(commision)不大于20%或者为NULL的员工的信息. CREATE TABLE plch_employees (     employee_id      INTEGER P ...

  10. Linux系统学习笔记之 1 基础命令

    翻看日记,看到以前自己学习Linux是的笔记来了,温故而知新乎.   文件命名规则: 1.除了/之外,所有的字符都合法. 2.有些字符最好不要用,如空格符.制表符.退格符.和@ # & ( ) ...