第三周作业
发布于: 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的单例模式有两个疑问:
if嵌套synchronized像是双重锁检测,典型的反模式。后来查了下资料,觉得应该是靠final修饰Map来解决可见性问题
synchronized同步块中没有再次判断singletonObject是否为空,好像做不到并发安全
划线
评论
复制
发布于: 2020 年 10 月 04 日 阅读数: 15
版权声明: 本文为 InfoQ 作者【华美而火锅】的原创文章。
原文链接:【http://xie.infoq.cn/article/ff35bd6c02f84812fb0e46aa8】。未经作者许可,禁止转载。
华美而火锅
关注
还未添加个人签名 2017.11.28 加入
还未添加个人简介
评论