核心--在类的内部把构造器私有化,同时在内部产生对象,并通过类.静态方法(static)返回实例化对象的引用

 

设计模式是在大量的实践总结和理论化之后优选的代码结果,编程风格,以及解决问题的思考方式.设计模式就像是经典的棋谱,不同的棋局我们用不同的棋谱.

单态设计模式:采取一定的方法保证在整个软件系统中,对某个类只能产生一个对象实例,并且该类只提供一个取得其对象的实例方法.

在java中实现单态模式只需要执行以下三步:  

  1.将类的构造方法的访问权限声明为private.这样就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象.

  2.在类内部生成一个静态的实例.

  3.提供一个静态的方法用于外部取得该类的实例.

  因为在类的外部无法得到类的对象,所以只能调用该类的某个静态方法以返回类内部创建的对象,又因为静态方法只能访问类中的静态成员变量,所以,指向类内部产生该类对象的变量也必须定义成静态的.

 

 

 

class Chinese{

    static Chinese objRef = new Chinese();

   

    private Chinese(){}

    public static Chinese getInstance(){

        return objRef;

    }

}

class Chinese_opt{

    static Chinese_opt objRef = null;

    private Chinese_opt(){}

    public static Chinese_opt getInstance(){

        if(objRef == null)

            objRef = new Chinese_opt();

        return objRef;

    }

   

}

class TestChinese{

    public static void main(String[] args){

        Chinese chinese1 = Chinese.getInstance();

        Chinese chinese2 = Chinese.getInstance();

        System.out.println(chinese1 == chinese2);

    }

}

 

 

 

 

 

1:构造方法私有化:

面向对象编程的三大特性:封装、继承、多态。类的封装性不仅体现在对属性的封装上,实际上方法也是可以被封装的,构造方法是特殊的方法当然也可以被封装,例如下面的代码就是对构造方法的封装:

package com.zxf.javaopp;

public class Singleton {

private Singleton(){     // 将构造方法进行了封装,私有化

}

public void print(){

System.out.println("Hello World!!!") ;

}

}

构造函数被私有化,不能在外部实例化,就无法在外部使用,此时只能在该类的内部实例化对象了,然后将该类拿到外部进行使用,由于该类不能再外部实例化,此时在内部的实例化必须是用static关键字修饰的:代码如下:

package com.zxf.javaopp;

class Singleton1{

static Singleton1 instance = new Singleton1() ;  // 在内部产生本类的实例化对象

private Singleton1(){       // 将构造方法进行了封装,私有化

}

public void print(){

System.out.println("Hello World!!!") ;

}

}

public class SingletonDemo01{

public static void main(String args[]){

Singleton1 s1 = null ;   // 声明对象

s1 = Singleton1.instance ;  // 取得实例化对象

s1.print() ;      // 调用方法

}

}

虽然上面的代码实现了功能,但又有些问题:通常情况下:我们将属性封装,此时的代码就要修改如下:

package com.zxf.javaopp;

class Singleton1{

static Singleton1 instance = new Singleton1() ;  // 在内部产生本类的实例化对象

public static Singleton1 getInstance(){       // 通过静态方法取得instance对象

return instance ;

}

private Singleton1(){       // 将构造方法进行了封装,私有化

}

public void print(){

System.out.println("Hello World!!!") ;

}

}

public class SingletonDemo01{

public static void main(String args[]){

Singleton1 s1 = null ;   // 声明对象

s1 = Singleton1.getInstance() ; // 取得实例化对象

s1.print() ;      // 调用方法

}

}

以上的代码似乎变得很复杂,不如不将构造方法实例化呢,但是为什么又会这样做呢?

假如我们现在要产生几个对象:按以往的代码,就需要实例化多次,每个对象都有其对应的堆栈空间,此时的内存就消耗的很多,系统的效率坑定比较低,但是使用将构造方法封装的模式效率就比较高:

使用将构造方法封装的方法:无论产生多少个对象,我们只实例化一次,这样的设计在设计模式上称为单态设计模式(单例设计模式):

singleton,如果不希望一个类产生多个实例的话,则必须使用单态设计模式,此设计模式,在以后的高性能开发中经常使用,而且在java的类库中大量的使用了此设计模式。

所谓单态就是在入口处限制了对象的实例操作。

单态设计模式的意义:

实际上这种模式非常常用,我们大家使用的windows操作系统中就使用了此设计模式,windows中用一个回车站: ,除了桌面以外,其他的每个硬盘中都有一个回车站,其他的回车站和其他硬盘的每个回车站都是同一个,也就是所整个操作系统中有且只有一个回车站,各个地方只是引用此实例。

总结:

单态设计模式的核心就是将类的

构造函数私有化,在类的内部产生实例对象,并通过类的静态方法返回类的实例对象。

JAVA单态设计模式的更多相关文章

  1. Java中单态设计模式

    Java中单态设计模式 2011-09-23 16:38:46|  分类: Java |  标签:technology!  |举报|字号 订阅     此博文是转自新浪博客中一名叫做"俊俊的 ...

  2. 基于java的设计模式入门(1)——为什么要学习设计模式

    大年初一,楼主在这里给大家拜年,祝大家码上升职加薪,码上有对象结婚,码上有车有房,幸福安康. 过完年,回学校注册报道之后,大概就要回深圳到公司开始实习了.提高自己,无非就有两种方式,一是看书学习,二是 ...

  3. php 单态设计模式

    单态设计模式通常包含以下三点: · 一个私有的 构造方法:(确保用户无法通过创建对象对其进行实例化) · 一个公有的 静态的 方法:(负责对其本身进行实例化) · 一个私有的 静态的 属性:(用于保存 ...

  4. Java 反射 设计模式 动态代理机制详解 [ 转载 ]

    Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...

  5. PHP 单态设计模式复习

    单态设计模式,也可以叫做单例设计模式, 就是一个类只能让它生成一个对象,避免重复的NEW,影响运行效率(每NEW一个对象都会在内存中开辟一块空间) 示例代码 <?php /* * 单态设计模式 ...

  6. 单例模式——Java EE设计模式解析与应用

    单例模式 目录: 一.何为单例 二.使用Java EE实现单例模式 三.使用场景 一.何为单例 确保一个类只有一个实例,并且提供了实例的一个全局访问点 1.1 单例模式类图               ...

  7. Java IO设计模式(装饰模式与适配器模式)

    01. 装饰模式 1. 定义 Decorator装饰器,就是动态地给一个对象添加一些额外的职责,动态扩展,和下面继承(静态扩展)的比较.因此,装饰器模式具有如下的特征: 它必须持有一个被装饰的对象(作 ...

  8. java多线程设计模式

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt220 java多线程设计模式 java语言已经内置了多线程支持,所有实现Ru ...

  9. Java经典设计模式之十一种行为型模式(附实例和详解)

    Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:Java经典设计模式之 ...

随机推荐

  1. operator.attrgetter() 进行对象排序

    ## 使用operator.attrgetter() 进行对象排序 from operator import attrgetter class Student: def __init__(self, ...

  2. 网站用户行为分析——Hadoop的安装与配置(单机和伪分布式)

    Hadoop安装方式 Hadoop的安装方式有三种,分别是单机模式,伪分布式模式,伪分布式模式,分布式模式. 单机模式:Hadoop默认模式为非分布式模式(本地模式),无需进行其他配置即可运行.非分布 ...

  3. 搭建Jupyter Notebook服务器

    昨天发了Jupyter的使用,补一篇Jupyter服务器的搭建~ 一.搭建Jupyter 1.安装 使用virtualenv建虚拟环境.在虚拟环境中安装jupyter.matplotlib等等需要的库 ...

  4. linux 下安装 Cisco Packet Tracer 7.11以及一些注意

    https://blog.csdn.net/qq_35882901/article/details/77652571 https://linux.cn/article-5576-1.html 开启登录 ...

  5. golang实现LRU,转载学习

    package main type LRUNode struct { key string val interface{} prev *LRUNode next *LRUNode } type LRU ...

  6. [Oracle]关于Oracle分页写法的性能分析及ROWNUM说明

    关于分页写法的性能分析及ROWNUM的补充说明 分页写法 一.测试前数据准备 SQL> SELECT COUNT(*) FROM BPM_PROCVAR; COUNT(*) ---------- ...

  7. Alexander的Python机器学习 之目录分析。

    无聊,顺应一下潮流,学习一下python机器学习吧. 买了一本书,首先分析一下目录吧. 1.第一章是 Python机器学习的生态系统. 1.1.数据科学或机器学习的工作流程. 然后又分成6点进行详细说 ...

  8. P1488 肥猫的游戏

    题目描述 野猫与胖子,合起来简称肥猫,是一个班的同学,他们也都是数学高手,所以经常在一起讨论数学问题也就不足为奇了.一次,野猫遇到了一道有趣的几何游戏题目,便拿给胖子看.游戏要求在一个有n个顶点凸多边 ...

  9. 北京Uber优步司机奖励政策(9月14日~9月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. Ruby 基础教程1-7

    函数: foo(x,y,z) foo(x,*args) foo(x,*args,c) foo(x=0,y="a") 2.0以后参数可以关键字指定 foo(x:0,y:0,z:0) ...