9.26

实验13:享元模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解享元模式的动机,掌握该模式的结构;

2、能够利用享元模式解决实际问题。

 

[实验任务一]:围棋

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

实验要求:

1.提交类图;

2.提交源代码;

3.注意编程规范;

4.要求用简单工厂模式和单例模式实现享元工厂类的设计

 

 

复制代码
Coordinates.java
package test13;
//外部状态类——坐标类
class Coordinates {

    private int x;
    private int y;

    public Coordinates(int x,int y) {
        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 test13;

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

ChessFactory.java
package test13;

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 test13;
public class BlackChess extends Chess{

    @Override
    public String getColor() {
        return "黑";
    }

}

WhiteChess.java
package test13;

public class WhiteChess extends Chess{

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

}
Client.java
package test13;

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(1, 1));
        black2.locate(new Coordinates(-4, 6));
        black3.locate(new Coordinates(2, 4));
        white1.locate(new Coordinates(-2, 3));
        white2.locate(new Coordinates(3, 3));
    }
}
复制代码

 

posted @   奶油冰激凌  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示