「架构师训练营」第 3 周作业
发布于: 2020 年 11 月 07 日
请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
1.
2.
根节点接口:
package cn.edu.ldu.test;import java.util.ArrayList;/** * 定义分支节点(窗口) */public interface IBranch { /** * 打印分支节点信息 * @return */ public String print(); /** * 增加分支节点 * @param branch */ public void addBranch(IBranch branch); /** * 增加叶子节点 * @param leaf */ public void addLeaf(ILeaf leaf); /** * 获得子集 * @return */ public ArrayList getChildren();}
叶子节点接口:
package cn.edu.ldu.test;/** * 定义叶子节点 */public interface ILeaf { /** * 打印叶子节点的信息 * @return */ public String print();}
窗口实现:
package cn.edu.ldu.test;import java.util.ArrayList;public class Window implements IBranch{ /** * 组件 */ private String component; /** * 组件展示内容 */ private String text; /** * 子集 */ private ArrayList children = new ArrayList(); public Window(String component,String text) { this.component = component; this.text = text; } @Override public String print() { // TODO Auto-generated method stub return "print " + component + "(" + text + ")"; } @Override public void addBranch(IBranch branch) { // TODO Auto-generated method stub children.add(branch); } @Override public void addLeaf(ILeaf leaf) { // TODO Auto-generated method stub children.add(leaf); } @Override public ArrayList getChildren() { // TODO Auto-generated method stub return children; } }
叶子节点实现:
package cn.edu.ldu.test;public class LeafPrint implements ILeaf{ /** * 组件 */ private String component; /** * 组件展示内容 */ private String text; public LeafPrint(String component,String text) { // TODO Auto-generated constructor stub this.component = component; this.text = text; } @Override public String print() { // TODO Auto-generated method stub return "print " + component + "(" + text + ")"; }}
测试类:
package cn.edu.ldu.test;import java.util.ArrayList;import cn.edu.ldu.util.File;public class ClientTest { public static void main(String[] args) { //定义窗口 IBranch window = new Window("winform","window窗口"); //定义logo ILeaf logo = new LeafPrint("Picture","logo图片"); //定义frame IBranch frame = new Window("frame","frame1"); //定义frame内部内容 ILeaf lable = new LeafPrint("lable","用户名"); ILeaf textBox = new LeafPrint("textBox","文本框"); ILeaf pwdLable = new LeafPrint("lable","密码"); ILeaf pwdBox = new LeafPrint("passwordbox","密码框"); ILeaf checkbox = new LeafPrint("CheckBox","复选框"); ILeaf remtextBox = new LeafPrint("textBox","记住用户名"); ILeaf linkLable = new LeafPrint("LinkLable","忘记密码"); //定义按钮 ILeaf loginButton = new LeafPrint("Button","登录"); ILeaf regButton = new LeafPrint("Button","注册"); window.addLeaf(logo); window.addBranch(frame); window.addLeaf(loginButton); window.addLeaf(regButton); frame.addLeaf(lable); frame.addLeaf(textBox); frame.addLeaf(pwdLable); frame.addLeaf(pwdBox); frame.addLeaf(checkbox); frame.addLeaf(remtextBox); System.out.println(window.print()); //打印出来 getChildrenInfo(window.getChildren()); } /** * 递归遍历组件 * @param arrayList */ private static void getChildrenInfo(ArrayList arrayList){ int length = arrayList.size(); for(int m = 0;m<length;m++){ Object item = arrayList.get(m); //如果是叶子节点就直接打印出来名称 if(item instanceof ILeaf){ System.out.println(((ILeaf) item).print()); }else { //如果是分支节点就先打印分支节点的名称,再递归遍历子节点 System.out.println(((IBranch)item).print()); getChildrenInfo(((IBranch)item).getChildren()); } } }}
打印结果:
划线
评论
复制
发布于: 2020 年 11 月 07 日阅读数: 27
小黄鱼
关注
码农 2018.12.27 加入
还未添加个人简介
评论