JAVA日报

 

 

实验3:工厂方法模式

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

1、理解工厂方法模式的动机,掌握该模式的结构;

2、能够利用工厂方法模式解决实际问题

 

[实验任务一]:加密算法

目前常用的加密算法有DES(Data Encryption Standard)和IDEA(International Data Encryption Algorithm)国际数据加密算法等,请用工厂方法实现加密算法系统。

实验要求:

1. 画出对应的类图;

2. 

2.提交该系统的代码,该系统务必是一个可以能够直接使用的系统,查阅资料完成相应加密算法的实现;

Java——————————————————————————————————————

public class Client

{

public static void main(String args[])

{

         try

         {

          Js js;

          JsFactory factory;

          factory=(JsFactory)XMLUtil.getBean();

          js=factory.produceJs();

          js.play();

         }

         catch(Exception e)

         {

          System.out.println(e.getMessage());

         }

}

}

import javax.xml.parsers.*;

import org.w3c.dom.*;

import org.xml.sax.SAXException;

import java.io.*;

public class XMLUtil

{

//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象

public static Object getBean()

{

try

{

//创建文档对象

DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = dFactory.newDocumentBuilder();

Document doc;

doc = builder.parse(new File("config.xml"));

 

//获取包含类名的文本节点

NodeList nl = doc.getElementsByTagName("className");

            Node classNode=nl.item(0).getFirstChild();

            String cName=classNode.getNodeValue();

            

            //通过类名生成实例对象并将其返回

            Class c=Class.forName(cName);

       Object obj=c.newInstance();

            return obj;

           }   

            catch(Exception e)

            {

            e.printStackTrace();

            return null;

            }

}

}

 

public interface Js

{

public void play();

}

 

public interface JsFactory

{

    public Js produceJs();

}

public class DESFactory implements JsFactory

{

    public Js produceJs()

    {

     System.out.println("DES");

     return new DESJs();

    }

}

public class IDEAFactory implements JsFactory

{

    public Js produceJs()

    {

     System.out.println("IDEA");

     return new IDEAJs();

    }

}

public class DESJs implements Js

{

public void play()

{

System.out.println("DES加密中");

}

}

public class IDEAJs implements Js

{

public void play()

{

System.out.println("IDEA加密中");

}

}

C++——————————————————————————————————————

 

#include "tinyxml.h"

#include <iostream>

#include <string>

using namespace std;

 TiXmlNode* XMLUtil(){

TiXmlNode* node=null;

TiXmlDocument doc;//申明一个文档类型变量,用来存储读取的xml文档

if (!doc.LoadFile("a.xml")) //检测xml文档是否存在

{

cerr << doc.ErrorDesc() << endl;

}

TiXmlElement* root = doc.FirstChildElement();//指向xml文档的根元素

if (root == NULL)//检测根元素存在性

{

cerr << "Failed to load file: No root element." << endl;

doc.Clear();

}

//elem指向根的第一个孩子元素

for (TiXmlElement* elem = root->FirstChildElement(); elem != NULL; elem = elem->NextSiblingElement()){

if (strcmp(elem->Value(), "className") == 0){ //也可以通过元素名寻找元素

node = elem->FirstChild();

cout << node->Value() << endl;

}

}

return node

}

public class Client

{

public DeFactory(String a)

{

          Js js;

          JsFactory factory;

          factory=XMLUtil();

          js=factory.produceJs();

          js.play();

        

}

}

 

public interface Js

{

public void play();

}

 

public interface JsFactory

{

    public Js produceJs();

}

public class DESFactory:public JsFactory

{

    public Js produceJs()

    {

     Cout<<DES;

     return new DESJs();

    }

}

public class IDEAFactory :public JsFactory

{

    public Js produceJs()

    {

     Cout<<IDEA;

     return new IDEAJs();

    }

}

public class DESJs :public Js

{

public void play()

{

Cout<<DES加密中;

}

}

public class IDEAJs :public Js

{

public void play()

{

Cout<<IDEA加密中;

}

}

 

 

3.注意编程规范。

posted @ 2021-10-11 21:12  我的未来姓栗山  阅读(36)  评论(0编辑  收藏  举报