设计原则:
1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需变化的代码混在一起。
2.针对接口编程,而不是针对实现编程。
3.多用组合,少用继承。
4.松耦合
5.类应该对扩展开放,对修改关闭
——
在不修改原有的模块(修改关闭:稳定性)的基础上,能扩展其功能(扩展开放:可扩展性)
6.依赖倒置原则
要依赖抽象,不要依赖具体类。
原则:
a.变量不可以持有具体类的引用。
b.不要让类派生自具体类。
c.不要覆盖基类中已实现的方法。
模式:
1.策略模式
定义了算法族,分别封装起来(
将算法或行为封装在类中,并在客户类中保持该类的一个引用),让他们之间可以相互替换。
此模式让算法的变化独立于使用算法的客户。
Has-A比Is-A更好。
2.出版者+订阅者=观察者模式(代表人物——MVC)
定义了对象间的一对多依赖,一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
3.装饰者模式(包装模式更形象)
动态的将责任附加到对象上。
此模式提供了比继承更有弹性的替代方案。
4.工厂方法模式:
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
5.抽象工厂模式(创建产品家族):
提供一个接口,用来创建相关或依赖对象的家族,而不需要明确指定具体类。
抽象工厂里的每一个创建方法都是一个工厂方法。
6.单件模式
考虑多线程时:
a.将static getInstance()方法同步——影响性能
b.取消延迟实例化——一开始就会产生一个实例
c.双重检查枷锁——第一次产生实例后,不再同步