11.7 实验七单例模式 实验八适配器模式

实验7:单例模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解单例模式的动机,掌握该模式的结构;
2、能够利用单列模式解决实际问题。

[实验任务一]:学号的单一
仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。
实验要求:
1.画出对应的类图;
2.提交源代码;
3.注意编程规范。
image

class Cat:
    def meow(self):
        return "喵"

def catch_mouse(self):
        return "猫抓到老鼠了"

class Dog:
    def bark(self):
        return "汪"

def fetch(self):
        return "狗把球带回来了"

class CatToDogAdapter:
    def init(self, cat):
        self.cat = cat

def bark(self):
        return self.cat.meow()  # 猫的'叫声'模拟成狗的'叫声'

def fetch(self):
        return "狗无法抓老鼠,但猫抓到了老鼠。"  # 狗不能抓老鼠

class DogToCatAdapter:
    def init(self, dog):
        self.dog = dog

def meow(self):
        return self.dog.bark()  # 狗的'叫声'模拟成猫的'叫声'

def catch_mouse(self):
        return "猫无法抓老鼠,但狗试图抓老鼠。"  # 猫不能抓老鼠

实际使用

def main():
    # 创建猫和狗的实例
    my_cat = Cat()
    my_dog = Dog()

# 创建适配器
    cat_as_dog = CatToDogAdapter(my_cat)
    dog_as_cat = DogToCatAdapter(my_dog)

# 猫叫成狗叫
    print("猫叫成狗叫:", cat_as_dog.bark())
    # 狗尝试抓老鼠
    print("狗尝试抓老鼠:", cat_as_dog.fetch())

# 狗叫成猫叫
    print("狗叫成猫叫:", dog_as_cat.meow())
    # 猫尝试抓老鼠
    print("猫尝试抓老鼠:", dog_as_cat.catch_mouse())

if name == "main":
    main()

实验8:适配器模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解适配器模式的动机,掌握该模式的结构;
2、能够利用适配器模式解决实际问题。

[实验任务一]:双向适配器
实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。
实验要求:
1.画出对应的类图;
2.提交源代码;
3.注意编程规范。

image

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

posted @ 2026-01-03 13:33  liu某人  阅读(4)  评论(0)    收藏  举报