享元模式——java实现

问题描述:

设计一个围棋软件,在系统中只存在一个白棋对象和一个黑棋对象,但是它们可以在棋盘的不同位置显示多次。

类图:

 

 代码:

//Coordinates.java
package shiyan13;
//外部状态类——坐标类
class Coordinates {

    private int x;
    private int y;

    public Coordinates(int x,int y) {
        // TODO Auto-generated constructor stub
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
}
//Chess.java
package shiyan13;

abstract class Chess {
    public abstract String getColor();
    public void locate(Coordinates co) {
        System.out.println(this.getColor()+"棋的位置:"+co.getX()+","+co.getY());
    }
}
//ChessFactory.java
package shiyan13;

import java.util.Hashtable;

public class ChessFactory {
    private static ChessFactory instance=new ChessFactory();
    private static Hashtable ht;
    public ChessFactory() {
        ht=new Hashtable();
        Chess black,white;
        black=new BlackChess();
        ht.put("b", black);
        white=new WhiteChess();
        ht.put("w", white);
    }
    public static ChessFactory getInstance() {
        return instance;
    }
    public static Chess getChess(String color) {
        return (Chess)ht.get(color)
;    }
}
//BlackChess.java
package shiyan13;
public class BlackChess extends Chess{

    @Override
    public String getColor() {
        // TODO 自动生成的方法存根
        return "黑";
    }

}
//WhiteChess.java
package shiyan13;

public class WhiteChess extends Chess{

    @Override
    public String getColor() {
        // TODO 自动生成的方法存根
        return "白";
    }

}
//Client.java
package shiyan13;

public class Client {

    public static void main(String[] args) {
        Chess black1,black2,black3,white1,white2;
        ChessFactory factory;
        factory = ChessFactory.getInstance();
        black1 = ChessFactory.getChess("b");
        black2 = ChessFactory.getChess("b");
        black3 = ChessFactory.getChess("b");
        white1 = ChessFactory.getChess("w");
        white2 = ChessFactory.getChess("w");
        black1.locate(new Coordinates(5, 5));
        black2.locate(new Coordinates(-3, 4));
        black3.locate(new Coordinates(3, 1));
        white1.locate(new Coordinates(-1, 5));
        white2.locate(new Coordinates(2, 4));
    }
}

  运行截图:

 

posted @ 2022-11-07 22:46  好(justice)……  阅读(18)  评论(0编辑  收藏  举报