(Button和EditText的)观察者模式
昨天遇到bug,看了下Button和EditText的观察者模式,觉得非常繁琐,理解成本很高。
原来大致是这样的:
Button实现Observer接口里的update()方法:
添加的观察者可以是自己实现Verifiable类,里面定义一些规则;也可以传一个实现了Verifiable的控件,比如EditText。这样的话注意上面蓝色的选中的代码,会把observer同时加到Button和EditText里。调用addObserver把规则加到那个控件自身的验证列表里去(是一个LinkedHashSet<Observer>),然后那个控件就会在自己发生某些变化的时候(比如onTextChanged, onFocusChanged)去update:
这只是一部分了,你可以在控件里添加observer,也可以在业务里添加;到现在仍觉得很绕。过度设计说的就是这个吧,简单问题复杂化,逻辑过于分散,滥用interface。所谓「观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。」这种说法,我是没有体会到。
四种LaunchMode
http://www.cnblogs.com/xiaoQLu/archive/2011/09/29/2195742.html
--
数据库模型设计三范式
1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;
数据库设计一般满足第三范式就够了 。
不符合第三范式的例子:
学号, 姓名, 年龄, 所在学院, 学院联系电话,关键字为单一关键字"学号";
存在依赖传递: (学号) → (所在学院) → (学院地点, 学院电话)
- 存在问题:
数据冗余:有重复值;
更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况
修正:
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 地点, 电话)。
reference:
http://www.jb51.net/article/19312.htm
http://www.2cto.com/database/201404/291443.html