2023/10/18 每日总结
实验13:享元模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解享元模式的动机,掌握该模式的结构;
2、能够利用享元模式解决实际问题。
[实验任务一]:围棋
设计一个围棋软件,在系统中只存在一个白棋对象和一个黑棋对象,但是它们可以在棋盘的不同位置显示多次。
今天完成了设计模式实验13
类图
源代码
package org.test13; public interface Chess { String getColor(); void locate(Location location); } package org.test13; public class BlackChess implements Chess{ @Override public String getColor() { return "黑色"; } @Override public void locate(Location location) { System.out.println("棋的位置"+location.getX()+" "+location.getY()); } } package org.test13; public class WhiteChess implements Chess{ @Override public String getColor() { return "白色"; } @Override public void locate(Location location) { System.out.println("棋的位置"+location.getX()+" "+location.getY()); } } package org.test13; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; public class ChessFactory { private static ChessFactory chessFactory; private HashMap<String,Chess> chessHashMap=new HashMap<>(); private ChessFactory(){ BlackChess blackChess = new BlackChess(); chessHashMap.put("black",blackChess); WhiteChess whiteChess = new WhiteChess(); chessHashMap.put("white",whiteChess); } public static ChessFactory getChessFactory(){ if(chessFactory==null){ ChessFactory factory = new ChessFactory(); chessFactory=factory; return factory; }else { return chessFactory; } } public Chess getChess(String color){ return chessHashMap.get(color); } } package org.test13; public class Location { private int x; private int y; public Location(int x, int y) { this.x = x; this.y = y; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getX() { return x; } public void setX(int x) { this.x = x; } } package org.test13; public class Client { public static void main(String[] args) { ChessFactory factory = ChessFactory.getChessFactory(); Chess white = factory.getChess("white"); System.out.println(white.getColor()); white.locate(new Location(3,5)); System.out.println(white.getColor()); white.locate(new Location(4,5)); Chess black = factory.getChess("black"); System.out.println(black.getColor()); black.locate(new Location(4,5)); System.out.println(black.getColor()); black.locate(new Location(5,5)); } }