第三周作业一

发布于: 11 小时前
第三周作业一
  • 最省心的写法:在类加载的时候就初始化好了,所以性能好,但某些情况下也会出现内存浪费的情况,更别说被反射和序列化攻击了。

  • 最麻烦写法:解决了某些情况下内存浪费的情况,采用双重检查的机制,相比直接用synchronized关键字也提供了一些性能,也实现了线程安全,但是代码的可读性比较差。跟上面那种一样都存在反射和序列化攻击的风险。

  • 最优雅的写法:利用java内存类的特性,很简洁的生成了单例,不存在线程安全问题。Singleton$SingletonHolder,存在的问题也同样

  • 最推荐的写法:直接上图,

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

代码如下 :

public interface Draw {
public abstract void print();
}
public class WinForm implements Draw{
private String name;
private Vector<Draw> drawVectors=new Vector<>();
public WinForm(String name){
this.name=name;
}
public void addDraw(Draw draw){
drawVectors.add(draw);
}
@Override
public void print() {
System.out.println("print "+this.getClass().getSimpleName()+"("+name+")");
for(Draw each:drawVectors){
each.print();
}
}
}
public class Frame extends WinForm{
public Frame(String name) {
super(name);
}
}
//其他组件类似
public class Button implements Draw{
private String name;
public Button(String name){
this.name=name;
}
@Override
public void print() {
System.out.println("print "+this.getClass().getSimpleName()+"("+name+")");
}
}
public class DrawTest {
public static void main(String[] args) {
winForm().print();
}
public static Draw winForm() {
WinForm winForm=new WinForm("WINDOWS窗口");
winForm.addDraw(new Picture("LOGO图片"));
winForm.addDraw(new Button("登录"));
winForm.addDraw(new Button("注册"));
Frame frame1=new Frame("FRAME1");
frame1.addDraw(new Label("用户名"));
frame1.addDraw(new TextBox("文本框"));
frame1.addDraw(new Label("密码"));
frame1.addDraw(new PasswordBox("密码框"));
frame1.addDraw(new CheckBox("复选框"));
frame1.addDraw(new TextBox("记录用户名"));
frame1.addDraw(new LinkLabel("忘记密码"));
winForm.addDraw(frame1);
return winForm;
}
}

发布于: 11 小时前 阅读数: 6
用户头像

carol

关注

还未添加个人签名 2018.04.13 加入

还未添加个人简介

评论

发布
暂无评论
第三周作业一