首页 > 其他分享 >软件设计:实验13:享元模式

软件设计:实验13:享元模式

时间:2024-11-28 21:15:42浏览次数:6  
标签:享元 13 软件设计 color board GoStone new public size

实验13:享元模式

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

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

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

 

[实验任务一]:围棋

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

实验要求:

1.提交类图;

2.提交源代码;

3.注意编程规范;

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

 

1.

 

2.import java.util.HashMap;

import java.util.Map;

 

// 棋子类

class GoStone {

    private String color;

 

    public GoStone(String color) {

        this.color = color;

    }

 

    public String getColor() {

        return color;

    }

}

 

// 简单工厂类

class GoStoneFactory {

    public GoStone getStone(String color) {

        return new GoStone(color);

    }

}

 

// 单例工厂类

class SingletonGoStoneFactory {

    private static SingletonGoStoneFactory instance;

    private Map<String, GoStone> stoneMap = new HashMap<>();

 

    private SingletonGoStoneFactory() {}

 

    public static SingletonGoStoneFactory getInstance() {

        if (instance == null) {

            instance = new SingletonGoStoneFactory();

        }

        return instance;

    }

 

    public GoStone getStone(String color) {

        if (!stoneMap.containsKey(color)) {

            stoneMap.put(color, new GoStone(color));

        }

        return stoneMap.get(color);

    }

}

 

// 棋盘类

class GoBoard {

    private int size;

    private GoStone[][] board;

 

    public GoBoard(int size) {

        this.size = size;

        this.board = new GoStone[size][size];

    }

 

    public void placeStone(GoStone stone, int x, int y) {

        if (x >= 0 && x < size && y >= 0 && y < size) {

            board[x][y] = stone;

        }

    }

 

    public void printBoard() {

        for (int i = 0; i < size; i++) {

            for (int j = 0; j < size; j++) {

                if (board[i][j] == null) {

                    System.out.print(". ");

                } else {

                    System.out.print(board[i][j].getColor() + " ");

                }

            }

            System.out.println();

        }

    }

}

 

// 客户端代码

public class GoGame {

    public static void main(String[] args) {

        int boardSize = 9; // 棋盘大小

        GoBoard board = new GoBoard(boardSize);

        GoStoneFactory factory = new GoStoneFactory();

        GoStone blackStone = factory.getStone("black");

        GoStone whiteStone = factory.getStone("white");

 

        board.placeStone(blackStone, 0, 0);

        board.placeStone(whiteStone, 1, 1);

        board.printBoard();

 

        // 使用单例工厂

        SingletonGoStoneFactory singletonFactory = SingletonGoStoneFactory.getInstance();

        GoStone blackStoneSingleton = singletonFactory.getStone("black");

        GoStone whiteStoneSingleton = singletonFactory.getStone("white");

 

        board.placeStone(blackStoneSingleton, 2, 2);

        board.placeStone(whiteStoneSingleton, 3, 3);

        board.printBoard();

    }

}

标签:享元,13,软件设计,color,board,GoStone,new,public,size
From: https://www.cnblogs.com/xuan-2004/p/18575174

相关文章

  • 软件设计:实验12:外观模式
    实验12:外观模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解外观模式的动机,掌握该模式的结构;2、能够利用外观模式解决实际问题。 [实验任务一]:计算机开启在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法......
  • 软件设计:实验16:命令模式
    实验16:命令模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解命令模式的动机,掌握该模式的结构;2、能够利用命令模式解决实际问题。 [实验任务一]:多次撤销和重复的命令模式某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对......
  • 软件设计:实验15:职责链模式
    实验15:职责链模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解职责链模式的动机,掌握该模式的结构;2、能够利用职责链模式解决实际问题。 [实验任务一]:财务审批某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万......
  • 软件设计:实验14:代理模式
    实验14:代理模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解代理模式的动机,掌握该模式的结构;2、能够利用代理模式解决实际问题。 [实验任务一]:婚介所婚介所其实就是找对象的一个代理,请仿照我们的课堂例子“论坛权限控制代理”完成这个实际问题,其中如果......
  • 软件设计:实验18:迭代器模式
    实验18:迭代器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解迭代器模式的动机,掌握该模式的结构;2、能够利用迭代器模式解决实际问题。 [实验任务一]:JAVA和C++常见数据结构迭代器的使用信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA......
  • 软件设计:实验17:解释器模式(选作)
    实验17:解释器模式(选作)本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解解释器模式的动机,掌握该模式的结构;2、能够利用解释器模式解决实际问题。 [实验任务一]:解释器模式某机器人控制程序包含一些简单的英文指令,其文法规则如下:expression::=directionact......
  • 软件设计: 实验19:中介者模式
    实验19:中介者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解中介者模式的动机,掌握该模式的结构;2、能够利用中介者模式解决实际问题。 [实验任务一]:虚拟聊天室在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:1.新的具......
  • HCA-13 网络地址转换
    目录NAT概述NAT技术原理静态NAT静态NAT原理静态NAT配置介绍静态NAT配置示例动态NAT动态NAT原理动态NAT转换示例动态NAT配置介绍动态NAT配置示例NAPT、Easy-IPNAPT原理NAPT配置示例EasyIP工作原理EasyIP配置示例NATServerNATServer使用场景NATServer配置示例随着Internet的发......
  • 鸿蒙ArkUI-X已更新适配API13啦
    ArkUI-X5.0.1Release版配套OpenHarmony5.0.1Rlease,API13,新增适配部分API13接口支持跨平台;框架能力进一步完善,支持Android应用非压缩模式,支持AndroidFragment对接跨平台。ACETools工具易用性提升,支持创建module时选择module类型、config提示优化和联动编译。组件跨平台能力......
  • Android 13.0 SystemUI下拉通知栏通知去掉长按事件
    1.前言在13.0的系统rom产品定制化开发中,在systemui模块中关于下拉状态栏这块也是非常重要的部分,最近在关于systemui下拉通知栏的每条通知部分要求去掉通知栏通知的长按事件,不需要长按功能,所以就需要分析下关于长按事件是在哪里注册的,然后去掉就可以了,接下来分析实现相关功能......