Java---設計模塊(單例的變形)(多例)

      網友投稿 1012 2022-05-30

      設計模式1——單例變形(多例)

      ★ 緩存在單例中的使用

      緩存在編程中使用很頻繁,有著非常重要的作用,它能夠幫助程序實現以空間換取時間,通常被設計成整個應用程序所共享的一個空間,現要求實現一個用緩存存放單例對象的類。

      說明:該緩存中可以存放多個該類對象,每個對象以一個key值標識,key值相同時所訪問的是同一個單例對象。

      給一個key值標識:

      package cn.hncu.pattern.mulitition; import java.util.HashMap; import java.util.Map; public class A { private static final Map map = new HashMap(); public A() { }//private也是可以的,這不是關鍵,關鍵是map是私有的,這個是集合的單例 public static A getInstance(String key){ A a = map.get(key); if(a==null){ a = new A(); map.put(key, a); } return a; } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      測試:

      Java---設計模塊(單例的變形)(多例)

      package cn.hncu.pattern.mulitition; public class Test { public static void main(String[] args) { Atest(); } private static void Atest() { A a1 = A.getInstance("hncu1"); System.out.println(a1); A a2 = A.getInstance("hncu2"); System.out.println(a2); A a3 = A.getInstance("hncu1"); System.out.println(a3); A a4 = A.getInstance("hncu2"); System.out.println(a4); A a5 = A.getInstance("hncu1"); System.out.println(a5); } }

      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

      測試輸出結果;

      cn.hncu.pattern.mulitition.A@11dba45 cn.hncu.pattern.mulitition.A@b03be0 cn.hncu.pattern.mulitition.A@11dba45 cn.hncu.pattern.mulitition.A@b03be0 cn.hncu.pattern.mulitition.A@11dba45

      1

      2

      3

      4

      5

      6

      可以發現:a1,a3,a5的地址的值是相等的,a2,a4是相等的。

      通過Buffer類調用Book類的單例:

      Book類:

      package cn.hncu.pattern.mulitition; public class Book { private String name; private int id; private double price; private String details; private static int cont=0; public Book() { id=cont++; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getDetails() { return details; } public void setDetails(String details) { this.details = details; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Book other = (Book) obj; if (id != other.id) return false; return true; } @Override public String toString() { return "Book [id=" + id + "]"; } }

      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

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      Buffer類:

      package cn.hncu.pattern.mulitition; import java.util.HashMap; import java.util.Map; public class Buffer { private static final Map map = new HashMap(); public Buffer() { }//private也是可以的,這不是關鍵,關鍵是map是私有的,這個是集合的單例 public static Book getInstance(String key){ Book a = map.get(key); if(a==null){ a = new Book(); map.put(key, a); } return a; } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      測試類;

      package cn.hncu.pattern.mulitition; public class Test { public static void main(String[] args) { Buffertest(); } private static void Buffertest() { Book bk1 = Buffer.getInstance("hncu1"); System.out.println(bk1); Book bk2 = Buffer.getInstance("hncu2"); System.out.println(bk2); Book bk3 = Buffer.getInstance("hncu3"); System.out.println(bk3); Book bk4 = Buffer.getInstance("hncu2"); System.out.println(bk4); Book bk5= Buffer.getInstance("hncu1"); System.out.println(bk5); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      輸出結果:

      Book [id=0] Book [id=1] Book [id=2] Book [id=1] Book [id=0]

      1

      2

      3

      4

      5

      6

      ★ 單例變形——多例模式

      把上面緩存的單例實現,做成一個能夠控制對象個數的共享空間,供整個應用程序使用。在緩存中維護指定個數的對象,每個對象的key值由該類內部指定,有外部請求時直接返回其中一個對象出去。

      說明:相當于維護一個指定數量的對象池,當請求個數超過控制的總數時,開始循環重復使用 。

      package cn.hncu.pattern.mulitition.multi; import java.util.HashMap; import java.util.Map; public class A { private static final Map map= new HashMap(); private static final int MAX=3;//控制容器中所能使用對象的總個數 private static int cont = 1;//代表池中目前將要被使用的對象的序號 public static A getInstance(){ A a = map.get(cont); if(a==null){ a=new A(); map.put(cont, a); } cont++; if(cont>MAX){ cont=1; } return a; } }

      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

      測試的類:

      package cn.hncu.pattern.mulitition; public class Test { public static void main(String[] args) { Atest2(); } private static void Atest2() { System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance()); System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance()); System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance()); System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance()); System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance()); System.out.println(cn.hncu.pattern.mulitition.multi.A.getInstance()); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      輸出結果:

      cn.hncu.pattern.mulitition.multi.A@18a49e0 cn.hncu.pattern.mulitition.multi.A@1f82982 cn.hncu.pattern.mulitition.multi.A@16d2633 cn.hncu.pattern.mulitition.multi.A@18a49e0 cn.hncu.pattern.mulitition.multi.A@1f82982 cn.hncu.pattern.mulitition.multi.A@16d2633

      1

      2

      3

      4

      5

      6

      7

      可以看到: 123行的輸出個不相同,

      第4行的地址和第一行的相同,

      第5行的地址和第二行的相同,

      第6行的地址和第三行的相同。

      依次類推,循環節點為3.

      Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Python編程:threading多線程
      下一篇:用DevCloud研發一款APP,這6大優勢能提高交付效率
      相關文章
      亚洲大码熟女在线观看| 亚洲剧场午夜在线观看| 亚洲国产美女在线观看| 亚洲中文字幕在线观看| 国产精品亚洲综合天堂夜夜| 亚洲日韩中文字幕无码一区| 国产精品亚洲午夜一区二区三区| 自怕偷自怕亚洲精品| 亚洲av日韩av天堂影片精品| 亚洲AV无码乱码国产麻豆穿越| 亚洲情XO亚洲色XO无码| 亚洲色大成网站WWW久久九九| 国产亚洲精品资在线| 亚洲愉拍99热成人精品热久久| 国产偷窥女洗浴在线观看亚洲 | 亚洲高清无码专区视频| MM1313亚洲国产精品| 国产成人 亚洲欧洲| 亚洲国产中文字幕在线观看| 亚洲国产精品自在拍在线播放| 亚洲精品在线视频| 在线a亚洲v天堂网2019无码| 亚洲熟女一区二区三区| 亚洲成AV人片一区二区| 亚洲一区二区中文| 亚洲校园春色小说| 亚洲 日韩经典 中文字幕| 亚洲乱人伦中文字幕无码| mm1313亚洲国产精品无码试看| 亚洲成A∨人片天堂网无码| 亚洲色偷偷狠狠综合网| 国产亚洲精品a在线观看| 亚洲精品国产精品乱码视色 | 亚洲国产中文在线二区三区免| 国产成人精品日本亚洲网址| 亚洲精品久久久久无码AV片软件| 亚洲狠狠色丁香婷婷综合| 亚洲成人影院在线观看| 中文字幕日韩亚洲| 亚洲欧洲国产日韩精品| 亚洲乱码在线播放|