设计模式

什么是单例模式
单例(单个的实例)
·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就是经典的单例模式。

posted @ 2022-03-27 21:00  捞月亮的渔夫  阅读(29)  评论(0)    收藏  举报