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. Android 模拟系统事件(三)

    简介 Android系统是基于Linux内核的,而Linux内核继承和兼容了丰富的Unix系统进程间通信(IPC)机制.Binder其实也不是Android提出来的一套新的进程间通信机制,它是基于Op ...

  2. 在mac上访问自带服务器权限问题

    在开发中,有时候我们需要自己的在电脑上做一些网络相关的测试功能,因此,我们必须在本地上模拟网络环境. 在模拟网络环境中,经常会遇到访问权限的问题.现在我就把自己的解决办法写出来.我用的模拟服务器站点是 ...

  3. hdu-4468-Spy-KMP+贪心

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4468 题目意思: 给你一个串r,求一个串s,使得s的前缀1+s的前缀2+s的前缀3+...+s的前缀 ...

  4. JQuery 操作input

    获取选中的值 获取一组radio被选中项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本 var item ...

  5. PostMessage和SendMessage的区别

    1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数.而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息 ...

  6. c#学习已经停止了

    为了养家糊口,没有时间学习c#.

  7. JavaScript之JS的执行环境和作用域

    一.执行环境是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为,每个执行环境都有一个与之关联的变量对象(variable object),环境 ...

  8. 部署SharePoint2013解决方案

    Add-SPSolutionInstall-SPSolution -Identity Grain2013.wsp -GACDeployment -CompatibilityLevel {14,15}  ...

  9. SQL中存储过程和自定义函数的区别(转载)

    存储过程:     存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在 ...

  10. 像jq那样获取对象的js原生方法

    使用过jq的童鞋非常喜欢jq获取对象的方法,只要$()就可以获取,在此我封装一个js获取对象的方法 [注意]只对chrome,Firefox,opera,Safari,ie8及ie8以上版本有效 fu ...