第三周作业

用户头像
华美而火锅
关注
发布于: 2020 年 10 月 04 日

第一题



第二题

package composite;

import java.util.ArrayList;
import java.util.List;

public class CompositeComponent {
public static void main(String[] args) {
Component logo = new Component("Picture");
Component login = new Component("Button-login");
Component register = new Component("Button-register");
Component labelUserName = new Component("Label-username");
Component labelPassword = new Component("Label-password");
Component textBoxUserName = new Component("Textbox-username");
Component textBoxPassword = new Component("Textbox-password");
Component checkboxRemember = new Component("Checkbox-remember");
Component textBoxRemember = new Component("Textbox-remember");
Component linkLableForget = new Component("LinkLable-forget");
Composite frame1 = new Composite("frame1");
frame1.addComponent(labelUserName);
frame1.addComponent(textBoxUserName);
frame1.addComponent(labelPassword);
frame1.addComponent(textBoxPassword);
frame1.addComponent(checkboxRemember);
frame1.addComponent(textBoxRemember);
frame1.addComponent(linkLableForget);
Composite winform = new Composite("window");
winform.addComponent(logo);
winform.addComponent(frame1);
winform.addComponent(login);
winform.addComponent(register);

winform.draw();
}

}


class Component {
private String name;

public Component(String name) {
this.name = name;
}

public void draw() {
System.out.println(String.format("print %s", name));

}
}

class Composite extends Component {
public Composite(String name) {
super(name);
}

private List<Component> components = new ArrayList<Component>();

public void addComponent(Component c) {
components.add(c);
}

@Override
public void draw() {
super.draw();
for (Component c : components) {
c.draw();
}
}
}






心得体会



看到spring的单例模式有两个疑问:

  1. if嵌套synchronized像是双重锁检测,典型的反模式。后来查了下资料,觉得应该是靠final修饰Map来解决可见性问题

  2. synchronized同步块中没有再次判断singletonObject是否为空,好像做不到并发安全

发布于: 2020 年 10 月 04 日 阅读数: 15
用户头像

华美而火锅

关注

还未添加个人签名 2017.11.28 加入

还未添加个人简介

评论

发布
暂无评论
第三周作业