实验14:代理模式

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

1、理解代理模式的动机,掌握该模式的结构;

2、能够利用代理模式解决实际问题。

 

[实验任务一]:婚介所

婚介所其实就是找对象的一个代理,请仿照我们的课堂例子论坛权限控制代理完成这个实际问题,其中如果年纪小于18周岁,婚介所会提示对不起,不能早恋!,并终止业务。

实验要求:

1. 提交类图;

2. 提交源代码;

3. 注意编程规范。

 

public interface AbstractPermission

{

    //修改个人信息

    public void modifyUserInfo();

 

    //查看他人信息

    public void lookOthersInfo();

 

    //设置年龄

    public void setAge(int age);

}

 

public class PermissionProxy implements AbstractPermission

{

    private RealPermission permission = new RealPermission();

    private int age = 18;

 

    //修改个人信息

    @Override

    public void modifyUserInfo()

    {

        if (age < 18)

        {

            System.out.println("对不起,不能早恋");

        } else if (age >= 18)

        {

            permission.modifyUserInfo();

        }

    }

 

    //查看他人信息

    @Override

    public void lookOthersInfo()

    {

        if (age < 18)

        {

            System.out.println("对不起,不能早恋");

        } else if (age >= 18)

        {

            permission.lookOthersInfo();

        }

    }

 

    //设置年龄

    @Override

    public void setAge(int age)

    {

        this.age = age;

    }

}

 

public class RealPermission implements AbstractPermission

{

    @Override

    public void modifyUserInfo()

    {

        System.out.println("修改用户信息");

    }

 

    @Override

    public void lookOthersInfo()

    {

        System.out.println("查看他人信息");

    }

 

    @Override

    public void setAge(int age)

    {

 

    }

}

 

import org.w3c.dom.Document;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

 

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import java.io.File;

 

public class XMLUtil

{

    public static Object getBean()

    {

        try

        {

            //创建DOM文档对象

            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();

            DocumentBuilder builder = dFactory.newDocumentBuilder();

            Document doc = builder.parse(new File("src/main/resources/config14.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 class Client

{

    public static void main(String[] args)

    {

        AbstractPermission permission = (AbstractPermission) XMLUtil.getBean();

 

        permission.modifyUserInfo();

        permission.lookOthersInfo();

        System.out.println("--------------");

        permission.setAge(15);

        permission.modifyUserInfo();

        permission.lookOthersInfo();

    }

}

 

<?xml version="1.0" encoding="UTF-8"?>

<config>

    <className>Tutorial_14.PermissionProxy</className>

</config>

 

posted on 2025-01-06 15:31    阅读(14)  评论(0)    收藏  举报