10.14

Code13發表於2024-11-27
軟體設計的實驗

實驗2:簡單工廠模式

本次實驗屬於模仿型實驗,透過本次實驗學生將掌握以下內容:

1、理解簡單工廠模式的動機,掌握該模式的結構;

2、能夠利用簡單工廠模式解決實際問題。


[實驗任務一]:女媧造人

使用簡單工廠模式模擬女媧(Nvwa)造人(Person),如果傳入引數M,則返回一個Man物件,如果傳入引數W,則返回一個Woman物件,如果傳入引數R,則返回一個Robot物件。請用程式設計實現上述場景。

實驗要求:

1. 畫出對應的類圖;

2. 提交原始碼

  1. // 定義一個Person介面
    interface Person {
    void display();
    }

    // 實現Person介面的Man
    class Man implements Person {
    @Override
    public void display() {
    System.out.println("I am a man.");
    }
    }

    // 實現Person介面的Woman
    class Woman implements Person {
    @Override
    public void display() {
    System.out.println("I am a woman.");
    }
    }

    // 實現Person介面的Robot
    class Robot implements Person {
    @Override
    public void display() {
    System.out.println("I am a robot.");
    }
    }

    // 簡單工廠類
    class Nvwa {
    public Person createPerson(String type) {
    if (type == null) {
    return null;
    }
    if (type.equalsIgnoreCase("M")) {
    return new Man();
    } else if (type.equalsIgnoreCase("W")) {
    return new Woman();
    } else if (type.equalsIgnoreCase("R")) {
    return new Robot();
    } else {
    return null;
    }
    }
    }

    // 測試類
    public class SimpleFactoryPatternDemo {
    public static void main(String[] args) {
    Nvwa nvwa = new Nvwa();

    Person person = nvwa.createPerson("M");
    if (person != null) {
    person.display();
    }

    person = nvwa.createPerson("W");
    if (person != null) {
    person.display();
    }

    person = nvwa.createPerson("R");
    if (person != null) {
    person.display();
    }
    }
    }

3.注意程式設計規範。

軟體設計 石家莊鐵道大學資訊學院

實驗3:工廠方法模式

本次實驗屬於模仿型實驗,透過本次實驗學生將掌握以下內容:

1、理解工廠方法模式的動機,掌握該模式的結構;

2、能夠利用工廠方法模式解決實際問題。


[實驗任務一]:加密演算法

目前常用的加密演算法有DES(Data Encryption Standard)和IDEA(International Data Encryption Algorithm)國際資料加密演算法等,請用工廠方法實現加密演算法系統。

實驗要求:

1. 畫出對應的類圖;

2.提交該系統的程式碼,該系統務必是一個可以能夠直接使用的系統,查閱資料完成相應加密演算法的實現;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;

public class DESEncryption {

// 生成DES金鑰
public static SecretKey generateKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56, SecureRandom.getInstanceStrong());
return keyGenerator.generateKey();
}

// DES加密
public static String encrypt(String data, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedData = cipher.doFinal(data.getBytes("UTF-8"));
return Base64.getEncoder().encodeToString(encryptedData);
}

// DES解密
public static String decrypt(String encryptedData, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] data = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
return new String(data);
}

public static void main(String[] args) {
try {
// 生成金鑰
SecretKey key = generateKey();
String originalText = "Hello, World!";

// 加密
String encryptedText = encrypt(originalText, key);
System.out.println("Encrypted Text: " + encryptedText);

// 解密
String decryptedText = decrypt(encryptedText, key);
System.out.println("Decrypted Text: " + decryptedText);
} catch (Exception e) {
e.printStackTrace();
}
}
}

3.注意程式設計規範。

實驗3:工廠方法模式

本次實驗屬於模仿型實驗,透過本次實驗學生將掌握以下內容:

1、理解工廠方法模式的動機,掌握該模式的結構;

2、能夠利用工廠方法模式解決實際問題。

[實驗任務一]:加密演算法

目前常用的加密演算法有DES(Data Encryption Standard)和IDEA(International Data Encryption Algorithm)國際資料加密演算法等,請用工廠方法實現加密演算法系統。

實驗要求:

1. 畫出對應的類圖;

2.提交該系統的程式碼,該系統務必是一個可以能夠直接使用的系統,查閱資料完成相應加密演算法的實現;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;

public class DESEncryption {

// 生成DES金鑰
public static SecretKey generateKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56, SecureRandom.getInstanceStrong());
return keyGenerator.generateKey();
}

// DES加密
public static String encrypt(String data, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedData = cipher.doFinal(data.getBytes("UTF-8"));
return Base64.getEncoder().encodeToString(encryptedData);
}

// DES解密
public static String decrypt(String encryptedData, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] data = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
return new String(data);
}

public static void main(String[] args) {
try {
// 生成金鑰
SecretKey key = generateKey();
String originalText = "Hello, World!";

// 加密
String encryptedText = encrypt(originalText, key);
System.out.println("Encrypted Text: " + encryptedText);

// 解密
String decryptedText = decrypt(encryptedText, key);
System.out.println("Decrypted Text: " + decryptedText);
} catch (Exception e) {
e.printStackTrace();
}
}
}

3.注意程式設計規範。