写点什么

设计模式代码实现

用户头像
dony.zhang
关注
发布于: 2020 年 06 月 23 日
设计模式代码实现



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





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





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





代码实现:主要类,View.java, ViewManager.java, ViewGroup.java, Button.java, WinForm.java等



//View.java
public class View {
protected String title;
public void draw() {
// prepare ...
onDraw();
}
protected void onDraw() {
// ...
}
}



//ViewManager.java
public interface ViewManager {
/**
* children view manager
*/
void addView(View view);
void removeView(View view);
View getChildren(int index);
}



//ViewGroup.java
public 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.java
public 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.java
public 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
用户头像

dony.zhang

关注

专注成就专业 2018.07.06 加入

程序员

评论

发布
暂无评论
设计模式代码实现