软件设计十三

 

 

实验13:享元模式

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

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

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

 

 

 

 

[实验任务一]:围棋

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

实验要求:

1.  提交类图;

 

 

2.  提交源代码;

//Coordinates.java

 

//外部状态类——坐标类

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

 

abstract class Chess {

    public abstract String getColor();

    public void locate(Coordinates co) {

        System.out.println(this.getColor()+"棋的位置:"+co.getX()+","+co.getY());

    }

}

//ChessFactory.java

 

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

public class BlackChess extends Chess{

 

    @Override

    public String getColor() {

        // TODO 自动生成的方法存根

        return "黑";

    }

 

}

//WhiteChess.java

 

public class WhiteChess extends Chess{

 

    @Override

    public String getColor() {

        // TODO 自动生成的方法存根

        return "白";

    }

 

}

//Client.java

 

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

    }

}

3.  运行结果

 

 

 

 

posted @   连师傅只会helloword  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
历史上的今天:
2023-11-15 11.14总结
点击右上角即可分享
微信分享提示