每日总结33

发布时间 2023-11-14 09:40:48作者: 布吉岛???

软件设计                  石家庄铁道大学信息学院

 

实验13:享元模式

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

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

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

 

[实验任务一]:围棋

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

实验要求:

1. 提交类图;

 

2. 提交源代码;

 

BlackChess.java

package ruanshe13;

public class BlackChess extends Chess{

 

     @Override

     public String getColor() {

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

         return "黑";

     }

     

 }

Chess.java

package ruanshe13;

 

abstract class Chess {

    public abstract String getColor();

    public void locate(Coordinates co) {

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

    }

}

ChessFactory.java

package ruanshe13;

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)

;    }

}

Client,java

package ruanshe13;

 

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(3, 3));

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

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

        white1.locate(new Coordinates(-2, 3));

        white2.locate(new Coordinates(1, 5));

    }

}

Coordinates.java

package ruanshe13;

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

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;

    }

}

WhiteChess.java

package ruanshe13;

 

public class WhiteChess extends Chess{

 

    @Override

    public String getColor() {

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

        return "白";

    }

 

}

3.注意编程规范;

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