享元模式

实验任务一]:围棋

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

实验要求:

1.提交类图;

2.提交源代码;

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;

}

 

}

 

 

abstract class IgoChessman {

 

public abstract String getColor();

public void locate(Coordinates coord){

System.out.println("棋子颜色:"+this.getColor()+",棋子位置:"+coord.getX()+","+coord.getY());

}

}

 

class BlackIgoChessman extends IgoChessman{

 

@Override

public String getColor() {

// TODO Auto-generated method stub

return "黑色";

}

 

}

class WhiteIgoChessman extends IgoChessman{

 

@Override

public String getColor() {

// TODO Auto-generated method stub

return "白色";

}

 

}

 

public class IgoChessmanFactory {

 

private static IgoChessmanFactory instance = new IgoChessmanFactory();

private static Hashtable ht;

 

public IgoChessmanFactory() {

// TODO Auto-generated constructor stub

ht = new Hashtable();

IgoChessman black,white;

black = new BlackIgoChessman();

ht.put("b", black);

white = new WhiteIgoChessman();

ht.put("w", white);

}

 

public static IgoChessmanFactory getInstance(){

return instance;

}

 

public static IgoChessman getIgoChessman(String color){

return (IgoChessman)ht.get(color);

}

}

 

public class Client {

 

public static void main(String[] args) {

IgoChessman black1,black2,black3,white1,white2;

IgoChessmanFactory factory;

factory = IgoChessmanFactory.getInstance();

black1 = factory.getIgoChessman("b");

black2 = factory.getIgoChessman("b");

black3 = factory.getIgoChessman("b");

System.out.println("判断两颗黑棋是否相同:"+(black1==black2));

white1 = factory.getIgoChessman("w");

white2 = factory.getIgoChessman("w");

System.out.println("判断两颗白棋是否相同:"+(white1==white2));

black1.locate(new Coordinates(1, 2));

black2.locate(new Coordinates(3, 4));

black3.locate(new Coordinates(1, 3));

white1.locate(new Coordinates(2, 5));

white2.locate(new Coordinates(2, 4));

}

}

posted @ 2021-11-04 00:01  Zwyooo  阅读(53)  评论(0编辑  收藏  举报