《架構師訓練營》-第三週-作業

手寫單例模式

在這裏插入圖片描述

組合模式

源碼地址: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 +
                '}';
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章