设计模式代码实现
发布于: 2020 年 06 月 23 日

1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。

2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。

类图设计:使用组合设计模式实现

代码实现:主要类,View.java, ViewManager.java, ViewGroup.java, Button.java, WinForm.java等
//View.javapublic class View {    protected String title;    public void draw() {        // prepare ...        onDraw();    }    protected void onDraw() {        // ...    }}
//ViewManager.javapublic interface ViewManager {    /**     * children view manager     */    void addView(View view);    void removeView(View view);    View getChildren(int index);}
//ViewGroup.javapublic class ViewGroup extends View implements ViewManager {    private ArrayList<View> mChildren = new ArrayList<>(16);        @Override    public void addView(View view) {        mChildren.add(view);    }    @Override    public void removeView(View view) {        mChildren.remove(view);    }    @Override    public View getChildren(int index) {        return mChildren.get(index);    }    @Override    protected void onDraw() {        super.onDraw();        for (View view : mChildren) {            view.draw();        }    }}
//各种控件组件(类似):Button.java, CheckBox.java, Label.java, LinkLabel.java, //PasswordBox.java, Picture.java, TextBox.javapublic class Button extends View {    public Button(String title) {        this.title = title;    }    @Override    protected void onDraw() {        super.onDraw();        System.out.println(getClass().getSimpleName() + "(" + title + ")");    }}
//容器组件:WinForm.java, Frame.javapublic class WinForm extends ViewGroup {    public WinForm(String title) {        this.title = title;    }    @Override    protected void onDraw() {        System.out.println(getClass().getSimpleName() + "(" + title + ")");        super.onDraw();    }}
 //客户端程序public class ViewTest {    public static void main(String[] args) {        ViewGroup winForm = new WinForm("WINDOW窗口");        winForm.addView(new Picture("LOGO图片"));        ViewGroup frame = new Frame("FRAME1");        frame.addView(new Label("用户名"));        frame.addView(new TextBox("文本框"));        frame.addView(new Label("密码"));        frame.addView(new PasswordBox("密码"));        frame.addView(new CheckBox("复选框"));        frame.addView(new TextBox("记住用户名"));        frame.addView(new LinkLabel("忘记密码"));        winForm.addView(frame);        winForm.addView(new Button("登录"));        winForm.addView(new Button("注册"));        winForm.draw();    }}
运行结果
WinForm(WINDOW窗口)Picture(LOGO图片)Frame(FRAME1)Label(用户名)TextBox(文本框)Label(密码)PasswordBox(密码)CheckBox(复选框)TextBox(记住用户名)LinkLabel(忘记密码)Button(登录)Button(注册)
划线
评论
复制
发布于: 2020 年 06 月 23 日阅读数: 56
版权声明: 本文为 InfoQ 作者【dony.zhang】的原创文章。
原文链接:【http://xie.infoq.cn/article/314fd9f69edfc67285e7fc14f】。文章转载请联系作者。

dony.zhang
关注
专注成就专业 2018.07.06 加入
程序员











 
    
评论