JAVA中23种设计模式之单例模式

1. 最简单的单例模式

  1. 什么叫单例模式:口语表达就是——一个类有且仅有一个对象,外部无法实例化它的新对象。只能通过调用的getXXX()方法来实例化对象,这个方法是自定义的。
  2. 最简单的单例模式例子

2. 例如

创建一个类,将这类变成单例模式的

package demo;
//自定义的类默认情况,是非单例的
public class MyService {

    //单例模式中,使用静态的当前类的对象,来作为它的属性
    //静态属性
    private static MyService myservice;

    private MyService(){

    }

    /**
     * 自定义添加的静态方法,用来构造单例模式
     * 不允许直接通过new一个对象来创建这个类的实例
     * @return
     */
    public static MyService getMyServiceInstance(){

        if(myservice==null){

            myservice = new MyService();
        }

        return myservice;
    }
} 

创建一个正常的类

package demo;

public class MyService_not {

    public void getMyService_not(){
        System.out.println("这是一个非单例模式下的构造方法");
    }
}

接下来我们来看看单例模式和普通类到底有什么区别



写个测试

package demo;

public class Test {

    public static void main(String[] args) {

        // MyService ms1 = new Myservice(); 这种直接通过new的方法创建实例是不会成功的
        MyService myService1 = MyService.getMyServiceInstance();
        MyService myService2 = MyService.getMyServiceInstance();

        //单例模式下实例化的2个对象
        System.out.println(myService1);
        System.out.println(myService2);

        System.out.println(myService1 == myService2);//相等true

        MyService_not not1 = new MyService_not();
        MyService_not not2 = new MyService_not();
        //非单例模式下实例化的2个对象
        System.out.println(not1);
        System.out.println(not2);

        System.out.println(not1==not2);//不相等 false

    }
}

控制台结果

demo.MyService@2f57d162
demo.MyService@2f57d162
true
demo.MyService_not@3639b3a2
demo.MyService_not@6406c7e
false
  • 可以看到从单例模式下,实例化出来的对象是一模一样的,而一般类实例化出的两个对象,是在堆区开辟出两个内存,将这个对象的内存地址传给栈区,栈区的这个对象的引用指向开辟出来的内存,所以两个对象是两块内存,两个地址,所以不一样,而单例模式下,是一块内存。这就是单例模式的特点。
  • 写在后面,这是我第一次写博客,今年刚毕业进入软件岗位,希望和我们一路提高自己,成为攻城狮。谢谢大家,如果觉得对亲有用的话,请顶一下吧


时间: 2024-09-16 09:52:01

JAVA中23种设计模式之单例模式的相关文章

从追MM谈Java的23种设计模式

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 从追MM 谈Java 的23 种设计模式   1 .FACTORY- 追MM 少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM 爱吃的东西,虽然口味有所不同,但不管你带MM 去麦当劳或肯 德基,只管向服务员说" 来四个鸡翅" 就行了.麦当劳和肯德基就是生产鸡翅的Factory.   工厂模式:客户类和工厂类分开.消费者任

追女孩与Java的23种设计模式间的交集

 创建型模式 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说"来四个鸡翅"就行了.麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开.消费者任何时候需要某种产品,只需向工厂请求即可.消费者无须修改就可以接纳新产品.缺点是当产品修改时,工厂类也要做相应的修改.如:如何创建及如何向客户端提供. 2.BUILDER-MM最爱听的就是"我爱你"这句

Java开发中的23种设计模式详解(转)

Java开发中的23种设计模式详解(转) 设计模式(Design Patterns)                                   --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合

Java开发中的23种设计模式详解(推荐)_java

设计模式(Design Patterns)                                   --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每

23种设计模式全解析

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下:   二.设计模式的六大原则 总原则:开闭原则(Open

谈谈23种设计模式在Android项目中的应用

前言 本文将结合实际谈谈23种设计模式,每种设计模式涉及 定义:抽象化的定义与通俗的描述,尽量说明清楚其含义与应用场景 示例:如果项目中有使用过该模式,则会给出项目中的代码,否则会给出尽可能简单好理解的java代码 Android:该设计模式在Android源码框架中哪些地方有使用到 重构:项目中是否存在可以用该模式进行重构的地方,如果有会给出重构前与重构后的代码或者思路 用这种方式进行介绍设计模式,旨在结合每天都在接触的Android实际项目开发更好地理解设计模式,拉近与设计模式的距离,同时在

关于java问题-java编程思想的23种设计模式有哪些

问题描述 java编程思想的23种设计模式有哪些 例如,单例设计模式其它就不知道了?可以的话在给个例子描述一下 解决方案 根据caozhy的提示,再整理一下 1. Memento(备忘录) 2. Chain of Responsibility(责任链) 3. Observer(观察者 4. Command(命令模式) 5. State(状态模式) 6. Interpreter(解释器 7. Strategy(策略模式) 8. Iterator(迭代子 9. Template Method(模板方

23种设计模式大全(适合新手阅读)

原文:23种设计模式大全(适合新手阅读) 第Ⅰ部分 开篇     序章 第Ⅱ部分 创建型模式篇     第1章 单例模式(Single Pattern)     第2章 简单工厂模式(Sample Factory)     第3章 抽象工厂模式(Abstract Factory)     第4章 建造者模式(Builder Pattern)     第5章 原型模式(Protype Pattern) 第Ⅲ部分 结构型模式篇     第6章 适配器模式(Adapter Pattern)     第

Java中几种常用数据类型之间转换的方法

Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) intvar 2. int-->short 转换 exp: short shortvar=0; int intvar=0; intvar=shortvar; 3. int->String 转换 exp: int intvar=1; String stringvar; Stringvar=string.