• Java设计模式09:单例模式的强化(控制实例个数n)


    1. 单例模式的本质:

    控制实例数目(目的节约资源

    2. 单例模式体现的一些思想:

    (1)延迟装载(Lazy Load):懒汉式

    (2)缓存:饿汉式

    3. 单例模式的变形使用

    控制使用实例个数为3个(实例池):

     1 package com.himi.hebao.singleinstance;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 public class Person {
     7     // 定义用来缓存数据的容器
     8     private static Map map = new HashMap();
     9     // 用来记录当前正在使用哪一个实例,初始化值为1
    10     private static int num = 1;
    11     // 用来记录需要控制的实例的总数为3个
    12     private static int count = 3;
    13 
    14     // 私有化Person构造方法
    15     private Person() {
    16     }
    17 
    18     public static Person getInstance() {
    19         // 1.到缓存里面查找需要使用的数据
    20         Person person = (Person) map.get(num);
    21         // 1.1 如果找不到
    22         if (person == null) {
    23             // 就新建一个数据(或者获取一个数据)
    24             person = new Person();
    25             // 然后把新的数据设置回到缓存中
    26             map.put(num, person);
    27         }
    28         // 每一次调用,就设置num加1;
    29         num++;
    30         // 如果num超过需要控制的总数,那么把num设置为1,开始重复循环使用
    31         if (num > count) {
    32             num = 1;
    33         }
    34         // 1.2 如果找到了就直接使用
    35         return person;
    36     }
    37     
    38     public static void main(String[] args) {
    39         Person person1 = Person.getInstance();
    40         System.out.println("person1====="+person1);
    41         
    42         Person person2 = Person.getInstance();
    43         System.out.println("person2====="+person2);
    44         
    45         Person person3 = Person.getInstance();
    46         System.out.println("person3====="+person3);
    47         
    48         Person person4 = Person.getInstance();
    49         System.out.println("person4====="+person4);
    50         
    51         Person person5 = Person.getInstance();
    52         System.out.println("person5====="+person5);
    53     }
    54 
    55 }

    运行效果如下:

     

  • 相关阅读:
    正则表达式的语法表
    leetcode1567. 乘积为正数的最长子数组长度 吴丹阳
    leetcode152. 乘积最大子数组 吴丹阳
    leetcode740. 删除并获得点数 吴丹阳
    leetcode53. 最大子数组和 吴丹阳
    leetcode55. 跳跃游戏 吴丹阳
    leetcode45. 跳跃游戏 II 吴丹阳
    leetcode213. 打家劫舍 II 吴丹阳
    leetcode918. 环形子数组的最大和 吴丹阳
    leetcode482. 密钥格式化 吴丹阳
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4888146.html
Copyright © 2020-2023  润新知