手寫單例模式
組合模式
源碼地址:https://github.com/CNXMBuyu/study_2020/tree/master/geek/src/main/java/cn/hgy/week3
package cn.hgy.week3;
/**
* @author guoyu.huang
* @version 1.0.0
*/
public class Main {
public static void main(String[] args) {
Form winForm = new Form("WINDOW窗口");
// logo
winForm.addElement(new Element(ElementTypeEnum.PICTURE, "logo"));
// frame
Frame frame = new Frame("FRAME1");
frame.addElement(new Element(ElementTypeEnum.LABEL, "用戶名"))
.addElement(new Element(ElementTypeEnum.TEXT_BOX, "用戶名"))
.addElement(new Element(ElementTypeEnum.LABEL, "密碼"))
.addElement(new Element(ElementTypeEnum.PASSWORD_BOX, "密碼"))
.addElement(new Element(ElementTypeEnum.CHECK_BOX, "複選框"))
.addElement(new Element(ElementTypeEnum.LABEL, "記住用戶名"))
.addElement(new Element(ElementTypeEnum.LINK_LABEL, "忘記密碼"));
// 添加到form
winForm.addFrame(frame)
.addElement(new Element(ElementTypeEnum.BUTTON, "登錄"))
.addElement(new Element(ElementTypeEnum.BUTTON, "註冊"));
System.out.println(winForm);
}
}
// 打印日誌
Form{frames=[Frame{elements=[Component{type=LABEL, name='用戶名'}, Component{type=TEXT_BOX, name='用戶名'}, Component{type=LABEL, name='密碼'}, Component{type=PASSWORD_BOX, name='密碼'}, Component{type=CHECK_BOX, name='複選框'}, Component{type=LABEL, name='記住用戶名'}, Component{type=LINK_LABEL, name='忘記密碼'}]}], elements=[Component{type=PICTURE, name='logo'}, Component{type=BUTTON, name='登錄'}, Component{type=BUTTON, name='註冊'}]}
基礎類
package cn.hgy.week3;
/**
* @author guoyu.huang
* @version 1.0.0
*/
public enum ElementTypeEnum {
WIN_FORM,
PICTURE,
BUTTON,
FRAME,
LABEL,
TEXT_BOX,
PASSWORD_BOX,
CHECK_BOX,
LINK_LABEL
}
package cn.hgy.week3;
/**
* @author guoyu.huang
* @version 1.0.0
*/
public class Element {
private ElementTypeEnum type;
private String name;
public Element(ElementTypeEnum type, String name){
this.name = name;
this.type = type;
}
public ElementTypeEnum getType() {
return type;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Component{" +
"type=" + type +
", name='" + name + '\'' +
'}';
}
}
package cn.hgy.week3;
import java.util.LinkedList;
import java.util.List;
/**
* @author guoyu.huang
* @version 1.0.0
*/
public class Form extends Element {
private List<Frame> frames = new LinkedList<>();
private List<Element> elements = new LinkedList<>();
public Form(String name) {
super(ElementTypeEnum.WIN_FORM, name);
}
public Form addFrame(Frame frame) {
this.frames.add(frame);
return this;
}
public Form addElement(Element element) {
this.elements.add(element);
return this;
}
@Override
public String toString() {
return "Form{" +
"frames=" + frames +
", elements=" + elements +
'}';
}
}
package cn.hgy.week3;
import java.util.LinkedList;
import java.util.List;
/**
* @author guoyu.huang
* @version 1.0.0
*/
public class Frame extends Element {
private List<Element> elements = new LinkedList<>();
public Frame(String name) {
super(ElementTypeEnum.FRAME, name);
}
public Frame addElement(Element element){
this.elements.add(element);
return this;
}
@Override
public String toString() {
return "Frame{" +
"elements=" + elements +
'}';
}
}