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. SDN 编程语言 p4(SDN programming language P4)

    行业趋势,SND是未来. P4 是未来. SDN is inevitably, and P4 is inevitably. P4 = Programming Protocol-Independent ...

  2. jQuery判断滚动条滚到页面底部脚本

    原文地址 http://www.111cn.net/wy/jquery/61741.htm

  3. android-supporting-multiple-devices

    There are a few common questions asked whenever development begins on a new Android app. What assets ...

  4. 百度Map调用

    baiduMap API 根据地址查询经纬度 http://api.map.baidu.com/geocoder?address=要查询的地址&output=json&key=你的ke ...

  5. 2014.9.15HTML

    <html> <title> </title> ——页面标题 <head> </head> ——网页上的控制信息 <body> ...

  6. BZOJ 1492: [NOI2007]货币兑换Cash( dp + 平衡树 )

    dp(i) = max(dp(i-1), x[j]*a[i]+y[j]*b[i]), 0<j<i. x, y表示某天拥有的最多钱去买金券, 金券a和金券b的数量. 然后就很明显了...平衡 ...

  7. SDOI2008 Sandy的卡片( 后缀数组 )

    求出后缀数组, 然后二分答案, 对height数组分组检验答案. 时间复杂度O(|S| log|S|) ------------------------------------------------ ...

  8. Svn服务启动的两种方式

    一.svn服务器启动 › cmd命令行启动:vsvnserve -d –r 文档仓库路径 -d 后台执行 › -r 版本库的根目录 二.›Windows服务自动启动     利用xp.2000 以上的 ...

  9. 原生js写的一个当前年份日期星期和时间的显示

    话不多说,所有代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type& ...

  10. javascript 修改css样式

    abc.css CSS code .class1     {    width:10px;    background-color: red;    } HTML code <!DOCTYPE ...