设计模式
什么是单例模式
单例(单个的实例)
·1.所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某
个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
2.单例模式有两种方式:1)饿汉式2)懒汉式
单例模式应用实例
演示饿汉式和懒汉式单例模式的实现。
步骤如下:
1)构造器私有化 >>防止new新的对象;
2)类的内部创建对象(对象类型为static类型)
3)向外暴露一个静态的公共方法。getlnstance
4.代码实现
1 package com.StaticVar;
2
3 public class Friend {
4 public static void main(String[] args) {
5 GirlFriend instance = GirlFriend.getInstance();
6 System.out.println(instance);
7 }
8 }
9
10 //单列模式中的饿汉式模式
11 class GirlFriend{
12 private String name;
13 //为了能够在静态方法中,返回F对象,需要将其修饰为static;
14 private static GirlFriend F= new GirlFriend("小红");//在本类内部至直接创建(new)一个static类型的对象(跟这个懒汉式的区别是,这里直接new一个对象)
15 /*
16 如何保障只能有一个对象
17 1.对构造器进行私有化;
18 2.在本类内部创建一个static
19 3.在本类提供一个公共的static方法,可以返回F 对象;
20 */
21 //构造器
22 public GirlFriend(String name) {
23 this.name = name;
24 }
25 //提供一个公共的static方法,可以返回F 对象;
26 public static GirlFriend getInstance(){
27 return F;
28 }
29
30 @Override
31 public String toString() {
32 return "GirlFriend{" +
33 "name='" + name + '\'' +
34 '}';
35 }
36 }
1 package com.StaticVar;
2
3 public class SingleTon {
4 public static void main(String[] args) {
5 System.out.println(Cat.n1);
6 Cat instance = Cat.getInstance();//new一个新对象,以便构造器被调用
7 System.out.println(instance);
8 }
9 }
10
11 //单列模式中的懒汉式
12 class Cat{
13 private String name;
14 //类变量
15 public static int n1= 99;
16 private static Cat cat; //定义一个static静态属性对象(还没创建new,只是定义)(与饿汉式的区别,这里没有直接new一个对象)
17 //步骤:
18 /*
19 1.对构造器进行私有化
20 2.定义一个static静态属性对象
21 3.提供一个Public的static方法,可以返回一个cat对象
22 4.懒汉式:只有当用户使用getInstance()时,才返回 cat对象,后面再次调用时,会返回上次创建的cat对象;
23 */
24 //构造器
25
26 private Cat(String name) {
27 System.out.println("构造器被调用.....");//还没调用;因为没有创建new对象;想要被调用的话,需要New一个对象
28 this.name = name;
29 }
30 public static Cat getInstance(){
31 if (cat==null){
32 cat =new Cat("小黄"); //想要被调用的话,需要New一个对象.
33 }
34 return cat;
35 }
36
37 @Override
38 public String toString() {
39 return "Cat{" +
40 "name='" + name + '\'' +
41 '}';
42 }
43 }
饿汉式VS懒汉式
1.二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,
而懒汉式是在使用时才创建。
2.饿汉式不存在线程安全问题,懒汉式存在线程安全问题。(后面学习线程后,会完善
・一把)
3.饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉
式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。
4.在我们javaSE标准类中,java.lang.Runtime就是经典的单例模式。
想多了都是问题,做多了才是答案

浙公网安备 33010602011771号