10.30 实验三工厂模式 实验四抽象工厂

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

[实验任务一]:加密算法
目前常用的加密算法有DES(Data Encryption Standard)和IDEA(International Data Encryption Algorithm)国际数据加密算法等,请用工厂方法实现加密算法系统。
实验要求:
1.画出对应的类图;
2.提交该系统的代码,该系统务必是一个可以能够直接使用的系统,查阅资料完成相应加密算法的实现;
3.注意编程规范。

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

[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:

实验要求:
1.画出对应的类图;
2.提交源代码;
3.注意编程规范。

image
image

Skin.java
public interface Skin {

String getColor();}

YellowSkin.java
java
public class YellowSkin implements Skin {
@Override
public String getColor() {
return "黄色";
}}
BlackSkin.java
public class BlackSkin implements Skin {
@Override
public String getColor() {
return "黑色";
}}
WhiteSkin.java
public class WhiteSkin implements Skin {
@Override
public String getColor() {
return "白色";
}}
Person.java
public abstract class Person {
// 依赖肤色对象(组合关系)
protected Skin skin;

/**
 * 构造方法:初始化肤色
 * @param skin 肤色对象
 */
public Person(Skin skin) {
    this.skin = skin;
}

/**
 * 展示人的信息(性别+肤色)
 */
public abstract void showInfo();}

MalePerson.java
public class MalePerson extends Person {
public MalePerson(Skin skin) {
super(skin);
}

@Override
public void showInfo() {
    System.out.println("性别:男,肤色:" + skin.getColor());
}}

FemalePerson.java
jpublic class FemalePerson extends Person {
public FemalePerson(Skin skin) {
super(skin);
}

@Override
public void showInfo() {
    System.out.println("性别:女,肤色:" + skin.getColor());
}}

PersonFactory.java
public abstract class PersonFactory {
public abstract Person createPerson(Skin skin);}
MaleFactory.java
public class MaleFactory extends PersonFactory {
@Override
public Person createPerson(Skin skin) {
return new MalePerson(skin);
}}
FemaleFactory.java
public class FemaleFactory extends PersonFactory {
@Override
public Person createPerson(Skin skin) {
return new FemalePerson(skin);
}}
Client.java
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
PersonFactory factory = null;
Skin skin = null;

    // 1. 选择性别(确定工厂)
    System.out.println("请选择性别:");
    System.out.println("1. 男");
    System.out.println("2. 女");
    int genderChoice = scanner.nextInt();
    scanner.nextLine(); // 吸收换行符

    switch (genderChoice) {
        case 1:
            factory = new MaleFactory();
            break;
        case 2:
            factory = new FemaleFactory();
            break;
        default:
            System.out.println("无效选择,默认创建男性");
            factory = new MaleFactory();
    }

    // 2. 选择肤色(确定产品等级)
    System.out.println("请选择肤色:");
    System.out.println("1. 黄色");
    System.out.println("2. 黑色");
    System.out.println("3. 白色");
    int skinChoice = scanner.nextInt();

    switch (skinChoice) {
        case 1:
            skin = new YellowSkin();
            break;
        case 2:
            skin = new BlackSkin();
            break;
        case 3:
            skin = new WhiteSkin();
            break;
        default:
            System.out.println("无效选择,默认使用黄色皮肤");
            skin = new YellowSkin();
    }

    // 3. 创建人实例并展示信息
    Person person = factory.createPerson(skin);
    System.out.println("创建结果:");
    person.showInfo();

    scanner.close();
}}
posted @ 2026-01-03 12:26  liu某人  阅读(8)  评论(0)    收藏  举报