实验14:代理模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:?
1、理解代理模式的动机,掌握该模式的结构;
2、能够利用代理模式解决实际问题。
婚介所其实就是找对象的一个代理,请仿照我们的课堂例子“论坛权限控制代理”完成这个实际问题,其中如果年纪小于18周岁,婚介所会提示“对不起,不能早恋!”,并终止业务。
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();
}
}
config14.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<className>Tutorial_14.PermissionProxy</className>
</config>
?