合成模式Composite(安全式的合成模式)

合成模式Composite(安全式的合成模式)

 

 

/**
 * 抽象构件角色
 * @author InJavaWeTrust
 *
 */
public abstract class Role {
	
	private String role;
	private String name;
	
	public Role(String role, String name) {
		this.role = role;
		this.name = name;
	}
	
	public String getInfo() {
		return this.role + "    " + this.name;
	}

}

 

import java.util.Vector;

/**
 * 树枝构件角色
 * @author InJavaWeTrust
 *
 */
public class Teacher extends Role {
	
	private Vector<Role> vec =new Vector<Role>();

	public Teacher(String role, String name) {
		super(role, name);
	}
	
	public void addRole(Role role) {
		vec.addElement(role);
	}
	
	public Vector<Role> getRole() {
		return vec;
	}
	
}

 

/**
 * 树叶构件角色
 * @author InJavaWeTrust
 *
 */
public class Student extends Role {

	public Student(String role, String name) {
		super(role, name);
	}

}

 

import java.util.Vector;

/**
 * 测试类
 * @author InJavaWeTrust
 *
 */
public class TestComposite {
	
	/**
	 * 构件角色树
	 * @return 构件角色树
	 */
	private static Teacher roleTree() {
		Teacher root = new Teacher("校长", "孔子");
		
		Teacher ter1 = new Teacher("老师", "张三");
		Teacher ter2 = new Teacher("老师", "李四");
		
		Student sdt1 = new Student("学生", "小明");
		Student sdt2 = new Student("学生", "小红");
		
		Student sdt3 = new Student("学生", "小刚");
		Student sdt4 = new Student("学生", "小林");
		
		root.addRole(ter1);
		root.addRole(ter2);
		
		ter1.addRole(sdt1);
		ter1.addRole(sdt2);
		
		ter2.addRole(sdt3);
		ter2.addRole(sdt4);
		
		return root;
	}
	
	/**
	 * 遍历角色树
	 * @param root
	 * @return
	 */
	private static String getRoleTree(Teacher root) {
		Vector<Role> vec = root.getRole();
		String s = "";
		for (Role role : vec) {
			if (role instanceof Student) {
				s = s + role.getInfo() + "\n";
			} else {
				s = s + role.getInfo() + "\n" + getRoleTree((Teacher) role);
			}
		}
		return s;
	}
	
	public static void main(String[] args) {
		Teacher root = roleTree();
		System.out.println(root.getInfo());
		System.out.println(getRoleTree(root));
	}
	
//	运行结果
//	校长    孔子
//	老师    张三
//	学生    小明
//	学生    小红
//	老师    李四
//	学生    小刚
//	学生    小林

}

 

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

装饰模式Decorator - 2016-07-14 19:07:51

装饰模式Decorator   /** * 抽象构件角色 * @author InJavaWeTrust * */public interface Farmer {public void work(String job);}   /** * 具体构件角色 * @author InJavaWeTrust * */public class Jack implements Farmer {@Overridepublic void work(String job) {}}   /** * 装饰角色 * @auth
官方标准开发工具: 1 .IDE     Eclipse  Java EE  IDE for Web Developers.     Version: Mars.2 Release (4.5.2)     Build id: 20160218-06002.JDK1.7 2. Tomcat7 3. Maven项目构建 4.  MySQL 5. 执行Mysql脚本     首先创建Mysql 数据库 jeecg-p3,采用UTF-8编码,执行对应插件的数据库脚本     脚本位置: {插件项目名}\doc\d
    如今的互联网,IT+时代,进入程序猿行业的人也是各种专业+了。言外之意大家自己体会,先来说说代码质量与数据结构的问题。     我自认为对于一个优秀的程序猿来说,数据结构是必须掌握的,就如List集合这种数据储存方式,官方解释为:List的特征是其元素以线性方式存储,集合中可以存放重复对象。     List这种数据结构的储存形式是不连续的,这一点正好和数组相反,如果各位猿们想节约内存开销,提高访问速度的话能用数组储存就别用集合。而list集合的遍历有一下两种方式: 1.get()方法获取 for(
视频稍后补充:『阿男和年糕的并发编程学习笔记』*03*锁的特性与Alpha锁的实现 锁应该具有以下特性: - Mutual Exclusion 两个不同的线程不应在同一时间段共同操作共享数据(do not overlap)。 - Freedom from Deadlock 多个线程里面,至少要有一个线程能够获得锁。 - Freedom from Starvation 每一个线程最终都能获得锁。 (第三个条件包含第二个条件) 我们一直使用锁,知道锁是可靠的,因为锁本身的内部实现保证了以上三点。如果锁本身都有问
在使用response.sendredirect(url)进行重定向时,遇到中文字符,如果不做任何处理,则在后台无法得到正确的中文字符,为了解决这一问题,今天尝试了好多次方法,这里记录一下我实测通过的方法: 使用response.sendredirect()时的处理 String encoder = "gb2312";String s = URLEncoder.encode("中国必胜",encoder); String url = Util.newPath+"/getDemandListInter.do?

java计算过G文件md5 值计算 - 2016-07-14 18:07:56

原文链接: http://www.cnblogs.com/yaowukonga/p/3523668.html   package io.bigdata;   import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgo
1、JEEWX 微信 企业管家,企业号配置         参数说明:        图文说明:   2、JEEWX微信企业管家,应用配置        输入说明:画红框为必须输入字段     3、微信企业应用后台配置 [1]. 模式选择回调模式    [2]. 回调模式参数配置   参数录入正确,点击保存会提供成功。    常见错误:   技巧一:回调URL格式说明     {项目访问地址}/weixinCoreController.do?wechatcorpid={corpid}appid={appi
获取【下载地址】    【免费支持更新】 三大数据库 mysql  oracle  sqlsever    更专业、更强悍、适合不同用户群体 【 新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统 】 A 集成代码生成器 [ 正反双向 (单表、主表、明细表、树形表, 开发利器 ) +快速构建表单 ; freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面、建表sql脚本,处理类,service等完整模块 B 集成阿里巴巴数据库连接池 druid;   数据库连接池  阿里巴巴

更好的日志管理SLF4J教程 - 2016-07-14 18:07:02

         每个Java程序员都多多少少用过日志,从最初的System.out.println("")打印信息,到之后用到的各种日志库如 java.util.logging,Apache log4j,logback等。但如果你还不知道SLF4J(Simple logging facade for Java)的话,那么是时候去学习使用SLF4J了。 更详细的SLF4J教程,在这里 http://www.madcsb.com/article/java/log/20160713.html , 如果大家喜欢

RESTEasy 2.x -> 3.x升级文档 - 2016-07-14 17:07:44

我的同事Ron写的RESTEasy 2.x - 3.x的升级文档,阿男觉得写得非常清楚明了,分享给大家。放在了附件当中。