天天看點

23種設計模式----備忘錄模式----行為模式

備忘錄模式

  • ​​1.什麼是備忘錄模式​​
  • ​​2.角色說明​​
  • ​​3.關系說明​​
  • ​​4.實作方式​​
  • ​​5.例子​​
  • ​​5.1檔案結構​​
  • ​​5.2項目介紹​​
  • ​​5.3骰子類​​
  • ​​5.4玩家類​​
  • ​​5.5快照類​​
  • ​​5.6使用者​​
  • ​​5.7結果​​
  • ​​6.擴充​​

23種設計模式

​​直達底部​​

1.什麼是備忘錄模式

現在許多的文本編輯器都有一些功能:

撤銷,重做,曆史記錄等等。

顯示生活中,遇到有意義的瞬間,大家就會拍照留念。

照片儲存了那個瞬間的一些資訊:所處的環境的資訊,目标的資訊。。。。

是以備忘錄模式就是實作可以儲存某個對象的狀态資訊的功能,儲存之後在需要的情況下,随時可以讓對象恢複到儲存的狀态。

2.角色說明

1.目标:被記錄的對象

2.快照:儲存的目标對象資訊的類

3.關系說明

實作備忘錄模式的核心思想:

首先,建立一個類,這個類根據被儲存對象進行設計,這個類需要滿足能夠記錄目标類的需要的資訊這個條件。為了保護資料,這個新建立的類不能随意的被其他類通路,隻能由目标類通路,其他類隻有恢複的操作,不能有通路屬性值的操作。

4.實作方式

首先快照類需要保證資料的安全性,是以快照類的屬性應該是私有,這樣即使其他的類繼承快照類,也無法擷取快照的屬性值。

其次,因為目标類需要能夠通路快照,是以快照類和目标需要在同一個包内:快照類設定自己的屬性的通路方法的權限為包内。

如果目标類的屬性值機密性高,那麼可以吧目标類的屬性通路方式設定為包内,這樣隻能由目标類和快照類互相通路。

方法的通路權限有包内這個還是有原因的。

5.例子

5.1檔案結構

23種設計模式----備忘錄模式----行為模式

5.2項目介紹

本次做一個遊戲:猜大小,很簡單,但是要知道程式是我們寫的,是以特權肯定要有了。是以本次猜大小遊戲的特權就是每一句輸了可以免單。怎麼說呢,猜大小,赢了加5分,輸了不加分(第二次輸會扣分)。(最後結果還能輸嗎)

5.3骰子類

package dice;

import java.util.Random;

public class Dice {

  public static Integer getDice(){
    return new Random().nextInt(6) + 1;
  }
  
}
      

5.4玩家類

package player;

import java.util.Random;

public class Player {

  private Integer score;
  
  private String name;
  
  public Integer getScore() {
    return score;
  }

  public void setScore(Integer score) {
    this.score = score;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
  
  public boolean getplay(){
    return new Random().nextBoolean();
  }
  
  public Memento createMemento(){
    Memento memento = new Memento(name, score);
    return memento;
  }
  
}      

5.5快照類

package player;

public class Memento {

  private String name;
  
  private Integer score;
  
  Memento(String name,Integer score) {
    this.name = name;
    this.score = score;
  }

  public Player reset(Player player,Memento memento){
    player.setName(memento.getName());
    player.setScore(memento.getScore());
    return player;
  }
  
  String getName() {
    return name;
  }

  void setName(String name) {
    this.name = name;
  }

  Integer getScore() {
    return score;
  }

  void setScore(Integer score) {
    this.score = score;
  }
  
}
      

5.6使用者

package client;

import java.util.Scanner;

import player.Memento;
import player.Player;
import dice.Dice;

public class Main {

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    
    System.out.println("create player");
    Player player = new Player();
    System.out.println("please input name");
    player.setName(scanner.next());
    System.out.println(player.getName()+"player score is 0");
    player.setScore(0);
    
    System.out.println("it will be 100 times game");
    System.out.println("game start");
    
    System.out.println("create mem");
    Memento memento = player.createMemento();
    
    int sum = 0;
    
    for(int i = 0;i < 100;i++){
      System.out.println((i+1)+"'s gamer");
      boolean b = player.getplay();
      System.out.println(player.getName()+"player is "+(b ? "大" : "小"));
      int d = Dice.getDice();
      System.out.println("the dice is "+d);
      System.out.println("so the result is "
          + ((d > 3 ? true : false) ? "大" : "小"));
      boolean res = (d > 3 && b) || (d <= 3 && !b);
      System.out.println((i+1)+"'s gamer is "+res);
      if(!res){
        System.out.println(player.getName()+"is false ,so please sub score");
        player.setScore(player.getScore() - 5 >= 0 ? player.getScore() - 5 : 0);
        System.out.println(player.getName()+"sub score is " + player.getScore());
        System.out.println("reset mem");
        player = memento == null ? player : memento.reset(player, memento);
        memento = null;
      } else {
        System.out.println(player.getName()+"is true ,so please add score");
        player.setScore(player.getScore() + 5);
        System.out.println(player.getName() + "'s score is"+player.getScore());
        System.out.println("save mem");
        memento = player.createMemento();
        sum++;
      }
    }
    System.out.println("now is over");
    
    System.out.println();
    System.out.println(player.getName()+" player have "+sum+"times game is true ");
    
  }

}
      

5.7結果

​​↓​​

create player
please input name
lili
liliplayer score is 0
it will be 100 times game
game start
create mem
1's gamer
liliplayer is 大
the dice is 1
so the result is 小
1's gamer is false
liliis false ,so please sub score
lilisub score is 0
reset mem
2's gamer
liliplayer is 大
the dice is 2
so the result is 小
2's gamer is false
liliis false ,so please sub score
lilisub score is 0
reset mem
3's gamer
liliplayer is 小
the dice is 3
so the result is 小
3's gamer is true
liliis true ,so please add score
lili's score is5
save mem
4's gamer
liliplayer is 小
the dice is 6
so the result is 大
4's gamer is false
liliis false ,so please sub score
lilisub score is 0
reset mem
5's gamer
liliplayer is 小
the dice is 4
so the result is 大
5's gamer is false
liliis false ,so please sub score
lilisub score is 0
reset mem
6's gamer
liliplayer is 小
the dice is 6
so the result is 大
6's gamer is false
liliis false ,so please sub score
lilisub score is 0
reset mem
7's gamer
liliplayer is 小
the dice is 2
so the result is 小
7's gamer is true
liliis true ,so please add score
lili's score is5
save mem
8's gamer
liliplayer is 小
the dice is 4
so the result is 大
8's gamer is false
liliis false ,so please sub score
lilisub score is 0
reset mem
9's gamer
liliplayer is 大
the dice is 5
so the result is 大
9's gamer is true
liliis true ,so please add score
lili's score is10
save mem
10's gamer
liliplayer is 大
the dice is 4
so the result is 大
10's gamer is true
liliis true ,so please add score
lili's score is15
save mem
11's gamer
liliplayer is 小
the dice is 6
so the result is 大
11's gamer is false
liliis false ,so please sub score
lilisub score is 10
reset mem
12's gamer
liliplayer is 小
the dice is 4
so the result is 大
12's gamer is false
liliis false ,so please sub score
lilisub score is 10
reset mem
13's gamer
liliplayer is 小
the dice is 2
so the result is 小
13's gamer is true
liliis true ,so please add score
lili's score is15
save mem
14's gamer
liliplayer is 小
the dice is 5
so the result is 大
14's gamer is false
liliis false ,so please sub score
lilisub score is 10
reset mem
15's gamer
liliplayer is 小
the dice is 6
so the result is 大
15's gamer is false
liliis false ,so please sub score
lilisub score is 10
reset mem
16's gamer
liliplayer is 小
the dice is 6
so the result is 大
16's gamer is false
liliis false ,so please sub score
lilisub score is 5
reset mem
17's gamer
liliplayer is 小
the dice is 2
so the result is 小
17's gamer is true
liliis true ,so please add score
lili's score is10
save mem
18's gamer
liliplayer is 小
the dice is 1
so the result is 小
18's gamer is true
liliis true ,so please add score
lili's score is15
save mem
19's gamer
liliplayer is 小
the dice is 5
so the result is 大
19's gamer is false
liliis false ,so please sub score
lilisub score is 10
reset mem
20's gamer
liliplayer is 小
the dice is 2
so the result is 小
20's gamer is true
liliis true ,so please add score
lili's score is20
save mem
21's gamer
liliplayer is 小
the dice is 5
so the result is 大
21's gamer is false
liliis false ,so please sub score
lilisub score is 15
reset mem
22's gamer
liliplayer is 小
the dice is 4
so the result is 大
22's gamer is false
liliis false ,so please sub score
lilisub score is 15
reset mem
23's gamer
liliplayer is 小
the dice is 4
so the result is 大
23's gamer is false
liliis false ,so please sub score
lilisub score is 10
reset mem
24's gamer
liliplayer is 大
the dice is 5
so the result is 大
24's gamer is true
liliis true ,so please add score
lili's score is15
save mem
25's gamer
liliplayer is 大
the dice is 6
so the result is 大
25's gamer is true
liliis true ,so please add score
lili's score is20
save mem
26's gamer
liliplayer is 小
the dice is 5
so the result is 大
26's gamer is false
liliis false ,so please sub score
lilisub score is 15
reset mem
27's gamer
liliplayer is 小
the dice is 3
so the result is 小
27's gamer is true
liliis true ,so please add score
lili's score is25
save mem
28's gamer
liliplayer is 大
the dice is 3
so the result is 小
28's gamer is false
liliis false ,so please sub score
lilisub score is 20
reset mem
29's gamer
liliplayer is 大
the dice is 4
so the result is 大
29's gamer is true
liliis true ,so please add score
lili's score is30
save mem
30's gamer
liliplayer is 小
the dice is 4
so the result is 大
30's gamer is false
liliis false ,so please sub score
lilisub score is 25
reset mem
31's gamer
liliplayer is 小
the dice is 2
so the result is 小
31's gamer is true
liliis true ,so please add score
lili's score is35
save mem
32's gamer
liliplayer is 小
the dice is 1
so the result is 小
32's gamer is true
liliis true ,so please add score
lili's score is40
save mem
33's gamer
liliplayer is 小
the dice is 3
so the result is 小
33's gamer is true
liliis true ,so please add score
lili's score is45
save mem
34's gamer
liliplayer is 小
the dice is 5
so the result is 大
34's gamer is false
liliis false ,so please sub score
lilisub score is 40
reset mem
35's gamer
liliplayer is 大
the dice is 3
so the result is 小
35's gamer is false
liliis false ,so please sub score
lilisub score is 40
reset mem
36's gamer
liliplayer is 大
the dice is 1
so the result is 小
36's gamer is false
liliis false ,so please sub score
lilisub score is 35
reset mem
37's gamer
liliplayer is 大
the dice is 6
so the result is 大
37's gamer is true
liliis true ,so please add score
lili's score is40
save mem
38's gamer
liliplayer is 大
the dice is 2
so the result is 小
38's gamer is false
liliis false ,so please sub score
lilisub score is 35
reset mem
39's gamer
liliplayer is 大
the dice is 2
so the result is 小
39's gamer is false
liliis false ,so please sub score
lilisub score is 35
reset mem
40's gamer
liliplayer is 小
the dice is 6
so the result is 大
40's gamer is false
liliis false ,so please sub score
lilisub score is 30
reset mem
41's gamer
liliplayer is 小
the dice is 5
so the result is 大
41's gamer is false
liliis false ,so please sub score
lilisub score is 25
reset mem
42's gamer
liliplayer is 小
the dice is 6
so the result is 大
42's gamer is false
liliis false ,so please sub score
lilisub score is 20
reset mem
43's gamer
liliplayer is 小
the dice is 2
so the result is 小
43's gamer is true
liliis true ,so please add score
lili's score is25
save mem
44's gamer
liliplayer is 大
the dice is 5
so the result is 大
44's gamer is true
liliis true ,so please add score
lili's score is30
save mem
45's gamer
liliplayer is 大
the dice is 5
so the result is 大
45's gamer is true
liliis true ,so please add score
lili's score is35
save mem
46's gamer
liliplayer is 小
the dice is 1
so the result is 小
46's gamer is true
liliis true ,so please add score
lili's score is40
save mem
47's gamer
liliplayer is 小
the dice is 2
so the result is 小
47's gamer is true
liliis true ,so please add score
lili's score is45
save mem
48's gamer
liliplayer is 大
the dice is 3
so the result is 小
48's gamer is false
liliis false ,so please sub score
lilisub score is 40
reset mem
49's gamer
liliplayer is 大
the dice is 5
so the result is 大
49's gamer is true
liliis true ,so please add score
lili's score is50
save mem
50's gamer
liliplayer is 小
the dice is 6
so the result is 大
50's gamer is false
liliis false ,so please sub score
lilisub score is 45
reset mem
51's gamer
liliplayer is 小
the dice is 5
so the result is 大
51's gamer is false
liliis false ,so please sub score
lilisub score is 45
reset mem
52's gamer
liliplayer is 大
the dice is 1
so the result is 小
52's gamer is false
liliis false ,so please sub score
lilisub score is 40
reset mem
53's gamer
liliplayer is 小
the dice is 1
so the result is 小
53's gamer is true
liliis true ,so please add score
lili's score is45
save mem
54's gamer
liliplayer is 大
the dice is 3
so the result is 小
54's gamer is false
liliis false ,so please sub score
lilisub score is 40
reset mem
55's gamer
liliplayer is 大
the dice is 5
so the result is 大
55's gamer is true
liliis true ,so please add score
lili's score is50
save mem
56's gamer
liliplayer is 大
the dice is 6
so the result is 大
56's gamer is true
liliis true ,so please add score
lili's score is55
save mem
57's gamer
liliplayer is 大
the dice is 5
so the result is 大
57's gamer is true
liliis true ,so please add score
lili's score is60
save mem
58's gamer
liliplayer is 小
the dice is 2
so the result is 小
58's gamer is true
liliis true ,so please add score
lili's score is65
save mem
59's gamer
liliplayer is 小
the dice is 6
so the result is 大
59's gamer is false
liliis false ,so please sub score
lilisub score is 60
reset mem
60's gamer
liliplayer is 小
the dice is 1
so the result is 小
60's gamer is true
liliis true ,so please add score
lili's score is70
save mem
61's gamer
liliplayer is 小
the dice is 6
so the result is 大
61's gamer is false
liliis false ,so please sub score
lilisub score is 65
reset mem
62's gamer
liliplayer is 大
the dice is 2
so the result is 小
62's gamer is false
liliis false ,so please sub score
lilisub score is 65
reset mem
63's gamer
liliplayer is 大
the dice is 3
so the result is 小
63's gamer is false
liliis false ,so please sub score
lilisub score is 60
reset mem
64's gamer
liliplayer is 大
the dice is 1
so the result is 小
64's gamer is false
liliis false ,so please sub score
lilisub score is 55
reset mem
65's gamer
liliplayer is 大
the dice is 4
so the result is 大
65's gamer is true
liliis true ,so please add score
lili's score is60
save mem
66's gamer
liliplayer is 大
the dice is 1
so the result is 小
66's gamer is false
liliis false ,so please sub score
lilisub score is 55
reset mem
67's gamer
liliplayer is 小
the dice is 4
so the result is 大
67's gamer is false
liliis false ,so please sub score
lilisub score is 55
reset mem
68's gamer
liliplayer is 大
the dice is 4
so the result is 大
68's gamer is true
liliis true ,so please add score
lili's score is60
save mem
69's gamer
liliplayer is 大
the dice is 6
so the result is 大
69's gamer is true
liliis true ,so please add score
lili's score is65
save mem
70's gamer
liliplayer is 大
the dice is 1
so the result is 小
70's gamer is false
liliis false ,so please sub score
lilisub score is 60
reset mem
71's gamer
liliplayer is 小
the dice is 2
so the result is 小
71's gamer is true
liliis true ,so please add score
lili's score is70
save mem
72's gamer
liliplayer is 大
the dice is 3
so the result is 小
72's gamer is false
liliis false ,so please sub score
lilisub score is 65
reset mem
73's gamer
liliplayer is 大
the dice is 5
so the result is 大
73's gamer is true
liliis true ,so please add score
lili's score is75
save mem
74's gamer
liliplayer is 小
the dice is 3
so the result is 小
74's gamer is true
liliis true ,so please add score
lili's score is80
save mem
75's gamer
liliplayer is 小
the dice is 2
so the result is 小
75's gamer is true
liliis true ,so please add score
lili's score is85
save mem
76's gamer
liliplayer is 大
the dice is 1
so the result is 小
76's gamer is false
liliis false ,so please sub score
lilisub score is 80
reset mem
77's gamer
liliplayer is 大
the dice is 6
so the result is 大
77's gamer is true
liliis true ,so please add score
lili's score is90
save mem
78's gamer
liliplayer is 大
the dice is 1
so the result is 小
78's gamer is false
liliis false ,so please sub score
lilisub score is 85
reset mem
79's gamer
liliplayer is 大
the dice is 3
so the result is 小
79's gamer is false
liliis false ,so please sub score
lilisub score is 85
reset mem
80's gamer
liliplayer is 大
the dice is 2
so the result is 小
80's gamer is false
liliis false ,so please sub score
lilisub score is 80
reset mem
81's gamer
liliplayer is 大
the dice is 4
so the result is 大
81's gamer is true
liliis true ,so please add score
lili's score is85
save mem
82's gamer
liliplayer is 大
the dice is 4
so the result is 大
82's gamer is true
liliis true ,so please add score
lili's score is90
save mem
83's gamer
liliplayer is 小
the dice is 3
so the result is 小
83's gamer is true
liliis true ,so please add score
lili's score is95
save mem
84's gamer
liliplayer is 大
the dice is 4
so the result is 大
84's gamer is true
liliis true ,so please add score
lili's score is100
save mem
85's gamer
liliplayer is 小
the dice is 5
so the result is 大
85's gamer is false
liliis false ,so please sub score
lilisub score is 95
reset mem
86's gamer
liliplayer is 小
the dice is 6
so the result is 大
86's gamer is false
liliis false ,so please sub score
lilisub score is 95
reset mem
87's gamer
liliplayer is 大
the dice is 4
so the result is 大
87's gamer is true
liliis true ,so please add score
lili's score is100
save mem
88's gamer
liliplayer is 大
the dice is 6
so the result is 大
88's gamer is true
liliis true ,so please add score
lili's score is105
save mem
89's gamer
liliplayer is 大
the dice is 5
so the result is 大
89's gamer is true
liliis true ,so please add score
lili's score is110
save mem
90's gamer
liliplayer is 小
the dice is 4
so the result is 大
90's gamer is false
liliis false ,so please sub score
lilisub score is 105
reset mem
91's gamer
liliplayer is 大
the dice is 5
so the result is 大
91's gamer is true
liliis true ,so please add score
lili's score is115
save mem
92's gamer
liliplayer is 小
the dice is 2
so the result is 小
92's gamer is true
liliis true ,so please add score
lili's score is120
save mem
93's gamer
liliplayer is 大
the dice is 1
so the result is 小
93's gamer is false
liliis false ,so please sub score
lilisub score is 115
reset mem
94's gamer
liliplayer is 小
the dice is 5
so the result is 大
94's gamer is false
liliis false ,so please sub score
lilisub score is 115
reset mem
95's gamer
liliplayer is 小
the dice is 5
so the result is 大
95's gamer is false
liliis false ,so please sub score
lilisub score is 110
reset mem
96's gamer
liliplayer is 小
the dice is 2
so the result is 小
96's gamer is true
liliis true ,so please add score
lili's score is115
save mem
97's gamer
liliplayer is 大
the dice is 5
so the result is 大
97's gamer is true
liliis true ,so please add score
lili's score is120
save mem
98's gamer
liliplayer is 大
the dice is 3
so the result is 小
98's gamer is false
liliis false ,so please sub score
lilisub score is 115
reset mem
99's gamer
liliplayer is 大
the dice is 2
so the result is 小
99's gamer is false
liliis false ,so please sub score
lilisub score is 115
reset mem
100's gamer
liliplayer is 小
the dice is 4
so the result is 大
100's gamer is false
liliis false ,so please sub score
lilisub score is 110
reset mem
now is over

lili player have 47times game is true 
      

6.擴充

繼續閱讀