java设计模式 实验一-简单工厂模式

简单工厂模式

 班级:软件工程1班      姓名:张雨  学号:2014416558

一、实验目的:
简单工厂设计模式应用
二、实验内容:
题目(一):
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Women对象,用Java语言实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
解答:
(1)通过分析,画出的实例类图如下所示:
这里写图片描述

(2)实例代码及解释
①抽象产品类Person

public interface Person
{
Public void make();
}

②具体产品类Man

 Public class Man implements Person
{
Public void make()
{
System.out.println(“制造一个男人”);
}
}

③具体产品类Woman

Public class Women implements Person
{
Public void make()
{
System.out.println(“制造一个女人”);
}
}

④具体产品类Robot

Public class Robot implements Person
{
Public void make()
{
System.out.println(“制造一个机器人”);
}
}

⑤工厂类Nvwa

Public class Nvwa
{
Public static Person makePerson(String sex)
{
If(sex.equalsIgnoreCase(“M”))
{
Return new Man();
}
If(sex.equalsIgnoreCase(“W”))
{
Return new Woman();
}
If(sex.equalsIgnoreCase(“R”))
{
Return new Robot();
}
Else
{
Return null;
}
}
}

题目(二):
自学Java密码技术,使用其中的类对字符串“Hello,design pattern”进行加密,要求使用对称加密算法TripleDES,理解其中密钥生成器(KeyGenerator)和密码器(Cipher)的创建和使用。

解答:
代码如下:

import java.security.InvalidKeyException;  
import java.security.NoSuchAlgorithmException;  
import java.security.Security;  

import javax.crypto.BadPaddingException;  
import javax.crypto.Cipher;  
import javax.crypto.IllegalBlockSizeException;  
import javax.crypto.KeyGenerator;  
import javax.crypto.NoSuchPaddingException;  
import javax.crypto.SecretKey;  

public class EncrypDES3 
{  

  // KeyGenerator 提供对称密钥生成器的功能,支持各种算法  
   private KeyGenerator keygen;  
   // SecretKey 负责保存对称密钥  
   private SecretKey deskey;  
   // Cipher负责完成加密或解密工作  
   private Cipher c;  
   // 该字节数组负责保存加密的结果  
   private byte[] cipherByte;  

      public EncrypDES3() throws NoSuchAlgorithmException, NoSuchPaddingException 
          {  
          Security.addProvider(new com.sun.crypto.provider.SunJCE());  
          // 实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)  
          keygen = KeyGenerator.getInstance("DESede");  
          // 生成密钥  
          deskey = keygen.generateKey();  
          // 生成Cipher对象,指定其支持的DES算法  
          c = Cipher.getInstance("DESede");  
          }  
         /** 
       * 对字符串加密 
        *  
        * @param str 
        * @return 
        * @throws InvalidKeyException 
        * @throws IllegalBlockSizeException 
        * @throws BadPaddingException 
        */  
            public byte[] Encrytor(String str) throws InvalidKeyException,  
            IllegalBlockSizeException, BadPaddingException 
            {  
               // 根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式  
              c.init(Cipher.ENCRYPT_MODE, deskey);  
             byte[] src = str.getBytes();  
             // 加密,结果保存进cipherByte  
             cipherByte = c.doFinal(src);  

             return cipherByte;  
          }  

    /** 
    * 对字符串解密 
    *  
    * @param buff 
   * @return 
   * @throws InvalidKeyException 
   * @throws IllegalBlockSizeException 
   * @throws BadPaddingException 
   */  
   public byte[] Decryptor(byte[] buff) throws InvalidKeyException,  
          IllegalBlockSizeException, BadPaddingException 
      {  
       // 根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式  
      c.init(Cipher.DECRYPT_MODE, deskey);  
      cipherByte = c.doFinal(buff);  
      return cipherByte;  
     }  

   /** 
    * @param args 
   * @throws NoSuchPaddingException  
   * @throws NoSuchAlgorithmException  
   * @throws BadPaddingException  
   * @throws IllegalBlockSizeException  
   * @throws InvalidKeyException  
   */  
  public static void main(String[] args) throws Exception 
 {  
       EncrypDES3 des = new EncrypDES3();  
      String msg ="Hello,design pattern";  
      byte[] encontent = des.Encrytor(msg);  
      byte[] decontent = des.Decryptor(encontent);  
       System.out.println("明文是:" + msg);  
       System.out.println("加密后:" + new String(encontent));  
       System.out.println("解密后:" + new String(decontent));  

   }  

}  




三、实验分析:

通过这次实验,我对简单工厂模式有了更深的理解,能够使用简单工厂模式解决简单的问题,对以前学过的Java有了印象,同时对UML类图的设计有了进一步的理解。
希望通过以后的实验能够对Java有更好的掌握,同时对设计模式有更深的理解。

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值