实验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>