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));
    }
}

 

posted @ 2023-10-18 22:39  樱花开到我身边  阅读(8)  评论(0)    收藏  举报