单例模式
Created|Updated
|Post View:
前言
简介
💻 时间稍纵即逝,从后面的文章开始就要开始正式的java设计模式学习了,如有不懂的可以留言哦.
详细讲解
单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。
这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
注意:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
两种类型
懒汉式单例模式
该模式包含2种常见的类型,分别是懒汉式单例模式(其特点是类加载时没有生成单例,
只有当第一次调用getInstance方法时才去创建这个单例)
饿汉式单例模式
饿汉式单例模式(其特点是类一旦加载就创建一个单例,
保证在调用getInstance方法之前单例已经存在了)。
学习要求
用懒汉式单例模式模拟产生美国当今总统对象
- 用饿汉式单例模式模拟产生猪八戒对象
懒汉式单例模式
懒汉式代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| package chapter02.singleton; public class SingletonLazy { public static void main(String[] args) { President zt1 = President.getInstance(); zt1.getName(); President zt2 = President.getInstance(); zt2.getName(); if (zt1 == zt2) { System.out.println("他们是同一人!"); }else { System.out.println("他们不是同一人!"); } } } class President{ private static volatile President instance=null; private President(){ System.out.println("产生一个总统!"); } public static synchronized President getInstance(){ if(instance==null){ instance=new President(); }else { System.out.println("已经有一个总统,不能产生新总统!"); } return instance; } public void getName() { System.out.println("我是美国总统:特朗普。"); } }
|
懒汉式类图

饿汉式单例模式
饿汉式代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package chapter02.singleton; import java.awt.*; import javax.swing.*; public class SingletonEager { public static void main(String[] args) { JFrame jf = new JFrame("饿汉单例模式测试"); jf.setLayout(new GridLayout(1,2)); Container contentPane = jf.getContentPane(); Bajie obj1 = Bajie.getInstance(); contentPane.add(obj1); Bajie obj2 = Bajie.getInstance(); contentPane.add(obj2); if (obj1 == obj2) { System.out.println("他们是同一人!"); }else { System.out.println("他们不是同一人!"); } jf.pack(); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} } class Bajie extends JPanel{ private static Bajie instance=new Bajie(); private Bajie(){ JLabel l1 = new JLabel(new ImageIcon("src/chapter02/singleton/Bajie.jpg")); this.add(l1); } public static Bajie getInstance(){ return instance; } }
|
懒汉式类图

代码运行
通过上面的学习,到了代码运行的结果了;如果你觉得有用,请给我多多支持!
