软件设计——代理模式之婚介所

1、类图

软件设计——代理模式之婚介所

2、代码

2.1 Person.java

package test14;
/*
 * 抽象权限类
 */
public interface Person {

	public void modifyUserInfo();
	public void viewPerson();
	public void publishSelf();
	public void modifyNote();
	public void setAge(int age);
}

2.2 PermissionProxy.java

package test14;

public class PermissionProxy implements Person{

	private RealPermission permission = new RealPermission();
	private int age = 20;
	
	public void modifyUserInfo() {
		permission.modifyUserInfo();
		if(age<18) {
			System.out.println("对不起,不能早恋!");
			System.out.println("正在退出服务...。");
			
		}else {
		System.out.println("   正在修改您的个人信息....");
		}
	} 
	
	public void viewPerson() {
		permission.viewPerson();
		if(age<18) {
			System.out.println("对不起,不能早恋!");
			System.out.println("正在退出服务....");
		}else {
			System.out.println("   正在浏览他人信息....");
		}
	}
	
	public void publishSelf() {
		permission.publishSelf();  //发布个人信息
		if(age<18) {
			System.out.println("对不起,不能早恋!");
			System.out.println("正在退出服务....");
		}else {
			System.out.println("   正在发布您的个人信息....");
		}
	}
	
	public void modifyNote() {
		permission.modifyNote();
		if(age<18) {
			System.out.println("对不起,不能早恋!");
			System.out.println("正在退出服务....");
		}else {
			
			System.out.println("   正在修改您发布的个人信息....");
		}
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

2.3 RealPermission.java

package test14;
/*
 * 真实权限类
 */
public class RealPermission implements Person{

	public void modifyUserInfo() {
		System.out.println("[修改个人信息]");
	};

	public void viewPerson() {
		System.out.println("[浏览他人信息]");
	};
	
	public void publishSelf() {
		System.out.println("[发布个人信息]");
	};
	
	public void modifyNote() {
		System.out.println("[修改发布内容]");
	};
	
	public void setAge(int age) {
		
	};
}

2.4 XMLUtil.java

package test14;
/*
 * 读取XML文件并根据存储在XML文件中的类名获取对应的对象
 */

 import javax.xml.parsers.*;
 import org.w3c.dom.*;
 import java.io.File;
 public class XMLUtil {
     @SuppressWarnings("deprecation")
	public static Object getBean() {
         try {
                 //创建DOM文档对象
                 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
                 DocumentBuilder builder = dFactory.newDocumentBuilder();
                 Document doc;
                 doc = builder.parse(new File("src/test14/config.xml"));
                 
                 //获取包含类名的文本节点
                 NodeList nl = doc.getElementsByTagName("className");
                 Node classNode = nl.item(0).getFirstChild();
                 String cName = classNode.getNodeValue();
                 
                 //通过类名生成实例对象返回
                 Class<?> c = Class.forName("test14."+cName);
                 Object obj = c.newInstance();
                 return obj;
         } catch (Exception e) {
             e.printStackTrace();
             return null;
         }
     }
 }

2.5 config.xml

<?xml version="1.0"?>
<config>
      <className>PermissionProxy</className>
</config>

2.6 Client.java

package test14;

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Person permission;
		permission = (Person)XMLUtil.getBean();
		permission.modifyUserInfo();
        permission.viewPerson();
        permission.publishSelf();
        permission.modifyNote();
        System.out.println("------- 修改年龄后-----------");
		permission.setAge(15);   /*把年龄设置为未成年*/
		permission.modifyUserInfo();
		permission.viewPerson();
		permission.publishSelf();		
		permission.modifyNote();
		
	}
}

3、运行截图

软件设计——代理模式之婚介所

上一篇:七、权限


下一篇:springboot + springsecurity + mybatis + mysql基于角色和权限的验证&授权