qwb0614

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  187 随笔 :: 0 文章 :: 0 评论 :: 2048 阅读

实验13:享元模式

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

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

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

 
   

 


[实验任务一]:围棋

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

实验要求:

1.  提交类图;

 

 

2.提交源代码;

3.注意编程规范;

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

复制代码
package ruanjiansheji.shiyan13;

public class BlackChess extends Chess{

    @Override
    public String getColor() {
        return "黑";
    }
}
package ruanjiansheji.shiyan13;

public abstract  class Chess {
    public abstract String getColor();
    public void locate(Coordinate co) {
        System.out.println(this.getColor()+"棋的位置:"+co.getX()+","+co.getY());
    }
}
package ruanjiansheji.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);
    }
}
    package ruanjiansheji.shiyan13;

public class Coordinate {
    private int x;
    private int y;

    public Coordinate(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;
    }
}
package ruanjiansheji.shiyan13;

public class Main {
    public static void main(String[] args) {
        Chess black1,black2,black3,white1,white2;

        black1 = ChessFactory.getChess("b");
        black2 = ChessFactory.getChess("b");
        black3 = ChessFactory.getChess("b");
        white1 = ChessFactory.getChess("w");
        white2 = ChessFactory.getChess("w");
        black1.locate(new Coordinate(1, 3));
        black2.locate(new Coordinate(-2, 5));
        black3.locate(new Coordinate(5, 4));
        white1.locate(new Coordinate(-4, 6));
        white2.locate(new Coordinate(3, 3));
    }
}
package ruanjiansheji.shiyan13;

public class WhiteChess extends Chess{
    @Override
    public String getColor() {
        return "白";
    }
}
复制代码

 

posted on   嘎嘎鸭1  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示