首页 > 其他分享 >软件设计:实验7:单例模式

软件设计:实验7:单例模式

时间:2024-11-27 17:14:31浏览次数:8  
标签:return 软件设计 isAssigned id int 实验 单例 newID public

实验7:单例模式

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

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

2、能够利用单列模式解决实际问题。

 

[实验任务一]:学号的单一

仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。

实验要求:

1.画出对应的类图;

2.提交源代码;

3.注意编程规范。

 

 

1.

2.import java.util.HashMap;

import java.util.Map;

 

// 学号管理类

class StudentID {

    private static Map<Integer, Boolean> idAssignments = new HashMap<>();

    private int id;

    private boolean isAssigned;

 

    public StudentID(int id) {

        this.id = id;

        this.isAssigned = false;

    }

 

    public static boolean isAssigned(int id) {

        return idAssignments.getOrDefault(id, false);

    }

 

    public static int assignNewID() {

        for (int i = 1; i <= 10000; i++) { // 假设学号范围是1到10000

            if (!idAssignments.containsKey(i)) {

                idAssignments.put(i, true);

                return i;

            }

        }

        return -1; // 没有可用的学号

    }

 

    public void assignID() {

        if (!isAssigned) {

            int newID = assignNewID();

            if (newID != -1) {

                this.id = newID;

                isAssigned = true;

                idAssignments.put(newID, true);

            }

        }

    }

 

    public int getId() {

        return id;

    }

 

    public boolean isAssigned() {

        return isAssigned;

    }

}

 

// 学生类

class Student {

    private int studentID;

    private String name;

    private int age;

 

    public Student(String name, int age) {

        this.name = name;

        this.age = age;

        this.studentID = 0; // 初始时学号为0,表示未分配

    }

 

    public void assignStudentID() {

        StudentID newID = new StudentID(0); // 创建一个新的学号对象

        newID.assignID(); // 分配学号

        this.studentID = newID.getId(); // 将分配的学号赋值给学生

    }

 

    public int getStudentID() {

        return studentID;

    }

 

    public String getName() {

        return name;

    }

 

    public int getAge() {

        return age;

    }

}

 

// 主类

public class UniqueStudentID {

    public static void main(String[] args) {

        Student student1 = new Student("Alice", 20);

        student1.assignStudentID(); // 分配学号

        System.out.println("Student1 ID: " + student1.getStudentID());

 

        Student student2 = new Student("Bob", 22);

        student2.assignStudentID(); // 分配学号

        System.out.println("Student2 ID: " + student2.getStudentID());

    }

}

标签:return,软件设计,isAssigned,id,int,实验,单例,newID,public
From: https://www.cnblogs.com/xuan-2004/p/18572669

相关文章

  • 软件设计:实验6:原型模式
    实验6:原型模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解原型模式的动机,掌握该模式的结构;2、能够利用原型模式解决实际问题。 [实验任务一]:向量的原型用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比......
  • 软件设计:实验5:建造者模式
    实验5:建造者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解建造者模式的动机,掌握该模式的结构;2、能够利用建造者模式解决实际问题。 [实验任务一]:计算机组装使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起......
  • 软件设计:实验9:桥接模式
    实验9:桥接模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解桥接模式的动机,掌握该模式的结构;2、能够利用桥接模式解决实际问题。 [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。实验要求......
  • 软件设计:实验8:适配器模式
    实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1.画出对应的类图;2.提交源......
  • 软件设计:实验10:组合模式
    实验10:组合模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合模式实现教材中的“文件夹浏览”这个例子。实验要求:1.文件的执行不需真正实现,只需简单提......
  • Educator头歌MySQL数据库实验五:授权及回收权限
    在开始讲解以及分享答案之前如果粘贴答案失效,请点击头歌系统右上角的电源键,释放资源重载数据库,再次进入才能正确通过第1关:授予某数据库的所有权限100任务要求参考答案记录评论任务描述相关知识MySql系统库中的权限表访问控制的两个阶段:授予的权限等级:MySQL权限类型grant......
  • GaussDB 数据库实验环境搭建指导
    @目录简介内容描述实验环境说明1GaussDB数据库购买1.1实验介绍1.1.1关于本实验1.1.2实验目的1.2购买GaussDB数据库1.2.1登录华为云1.2.2购买华为云GaussDB数据库简介本指导书适用于在华为云部署购买GaussDB数据库,通过该指导书可以顺利完成GaussDB数据库在华为云的购买。......
  • 软件设计-Tutorial25
    类图:```mermaidclassDiagramclassItem{<<interface>>+accept(Visitorvisitor)}classBook{-Stringtitle+getTitle()+accept(Visitorvisitor)}classElectronic{-String......
  • 上机实验四:SMO 算法实现与测试
    fromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_split,cross_val_score,StratifiedKFoldfromsklearn.svmimportSVCfromsklearn.metricsimportaccuracy_score,precision_score,recall_score,f1_scoreimportnumpyasnp#(1)加载iris数据......
  • 实验 25:访问者模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解访问者模式的动机,掌握该模式的结构;2、能够利用访问者模式法解决实际问题。 [实验任务一]:打包员在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。实验要求:1. 画出对应的......