构造私有化和单例设计模式

以下的代码对构造方法进行了私有化封装,但这样封装后我们在类外需要实例化对象是会出现错误,因为构造方法是私有的,所以无法实例化。

1 class Singleton{
2     private Singleton() {}
3     public void print() {
4         System.out.println("hello world");
5     }

既然在外部不能实例化对象,我们可以在类的内部实例化对象。

 1 class Singleton {
 2 // 在类的内部进行实例化对象
 3     private static Singleton instance = new Singleton();
 4 // 获得instance属性
 5     public static Singleton getInstance() {
 6         return instance;
 7     }
 8     private Singleton() {} // 对构造函数进行了私有化封装
 9
10     public void print() {
11         System.out.println("hello world");
12     }
13 }

也因为外部不能实例化对象,我们如果要使用instance属性,就应该把它定义为static类型,此时我们就可以在外部调用getInstance()方法来实例化Singleton类型对象了。但这样做有什么用了,但我们实例化多个Singleton对象时,可以看到,s1、s2、s3其实指向的是同一个Singleton对象。

1 public class DataTest {
2     public static void main(String args[]) {
3         Singleton s1 = Singleton.getInstance();
4         Singleton s2 = Singleton.getInstance();
5         Singleton s3 = Singleton.getInstance();
6     }
7 }

也就是说不管外部声明了多少个Singleton对象,最终结果都是通过调用getInstance()方法取得的实例化对象,即s1、s2、s3实际上都使用了一个对象的引用:instance。

那么这样的设计在设计模式上来讲叫做单例设计模式(单态设计模式)。

单例设计模式的核心是将类的构造方法私有化,之后在类的内部产生实例化对象,并通过类的静态方法返回实例化对象的引用。

如果现在不希望一个类产生过多的对象时,就可以采用单例设计模式。这在Java支持的类库中会经常用到。

原文地址:https://www.cnblogs.com/mzct123/p/8283448.html

时间: 2024-10-26 02:14:39

构造私有化和单例设计模式的相关文章

JAVA笔记5__构造块、静态块/单例设计模式/继承/final关键字/super关键字

public class Main { { //构造块(在构造对象时调用,先于构造方法执行) System.out.println("我是构造块!"); } static{ //静态块(在类加载时执行,且只执行一次[在构造块前执行]eg:数据库连接) System.out.println("我是静态块!"); } public Main(){ System.out.println("我是构造方法!"); } public static void

单例设计模式

一:单例设计模式的定义 单例设计模式,顾名思义,就是在整个程序运行过程中,只向外界提供一个对象,这样做可以避免资源的浪费,例如 我们打开回收站或者ppt时,只会启动一个窗口. 单例模式的java实现: 1:饿汉式 1 /** 2 * 3 */ 4 package com.hlcui.singleton; 5 6 /** 7 * @author Administrator 饿汉式单例类 8 */ 9 public class SingletonDemo { 10 // 1:内部创建一个对象 11

黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 设计模式分类: 创建模式:是对类的实例化过程的抽象化,又分为类创建模式和对象创建模式 类创建模式:工厂方法模式 对象-:简单工厂(静态工厂方法)模式.抽象工厂模式.单例模式.建造模式- 结构模式:描述如何将类或者对象结合在一起形成更大的结构 适配器模式.缺省模式.合成模式.装饰模式(包装模式).门面模式- 行为模式:对不同的对象之间划分责任和算法的抽象化 不变模式.策略模式.迭代子模式.命令模

java设计模式--单例设计模式

java中共有21种设计模式,其中面试中常问的是单例设计模式: 单例设计模式有两种常用的方式:1.懒汉式:1)先私有化构造函数,让此类不能被实例化:(private 类名(){}):2)在类中自己实例化一个空的对象:(private static 类名  对象名=null;):3)构造一个方法,返回本类的对象:在中间增加一个判断语句,如果进来的对象是个空值,就new一个实例化,否则直接返回此对象: 例如: /** * 懒汉式 * @author chenjun *2017-5-2上午9:16:0

笔记:Java中的单例设计模式

之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类有且仅有一个实例,并且自行实例化向整个系统提供. 单例模式的用处:一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号)生成器.如在Windows中就只能打开一个任务管理器.如果不使用机制对窗口对象进行唯一化,将

小看--单例设计模式

(一)单例设计描述 只要了解过设计模式的同学都会知道:单例设计模式,大家都知道单例设计模式是一种创建行的设计模式.既然是创建型,那么先来讲讲,对象的创建的过程吧. --静态成员:静态成员在程序加载的时候,就会加载进内存. --实例成员:只有new的时候才有实例成员.1.为实例的数据字段分配内存,然后初始化对象的附加字段(类型指针和同步索引块),最后调用类型的实例构造器来设置对象的初始化状态. 单例模式:一般用在一个类的创建对象很消耗资源,消耗时间,并且系统要保证只有一个对象的时候.一句话,对象的

Java——单例设计模式

设计模式:解决某一类问题最行之有效的方法.Java中23种设计模式:单例设计模式:解决一个类在内存中只存在一个对象. 想要保证对象唯一.1,为了避免其他程序过多建立该类对象.先禁止其他程序建立该类对象2,还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象.3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式 这三部怎么用代码体现呢?1,将构造函数私有化.2,在类中创建一个本类对象.3,提供一个方法可以获取到该类对象. 对于事物该怎么描述,还怎么描述.当需要将该事物的对象

java的单例设计模式

/* 单例设计模式解决的问题:可以保证一个类在内存中对象唯性一性(数据实现了共享). 如何保证对象唯一性呢?1,不允许其他程序用 ,2,在该类创建一个本实例.3,对外提供一个方法让其他程序可以获取该象.步骤:1,私有化该类构造函数. 2.通过 new 在本类中创建一个对象. 3,定义一个公有的方法,将创建对象返回.*/ public class Test1 { public static void main(String[] args) { // TODO 自动生成的方法存根 Test5 t1=

设计模式总纲——单例设计模式

前两天写了设计模式总纲,今天就来讲讲我们在工程代码中最最最常用的设计模式了——单例设计模式,这个模式在工程代码上的出现率几乎为99.99999%,但是虽然很常用,但是用的好的人却不多,今天我们就来深入的说一说单例设计模式. 在学习一项新的知识之前,我们都要向自己提出三个问题,为什么要用这个知识,这个知识用在哪里,这个知识怎么用?既 why,where,how,3W模式,我们先来谈谈为什么需要单例设计模式,先来想想,如果一个工具类,比如一个读取配置文件的工具类,这类工具只是特定的功能类,既读取指定