设计模式代码实现
发布于: 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 加入
程序员
评论