设计模式概述
设计模式是在特定环境下为解决某一通用软件设计问题提供的一套定制解决方案。
设计模式分类
1、目的分类
- 创建型:主要用于创建对象。
- 结构型:主要用于处理类或对象的组合
- 行为型:主要用于描述类或者对象交互和分配职责
2、范围分类 - 类模式处理类和子类之间的关系
- 对象模式处理对象间的关系
面向对象的设计原则
1、单一职责
在软件系统中(大到模块,小到方法)承担的职责越多,被复用的可能性就越小。所以,尽可能的保证类或者方法的职责单一性,降低复用难度,有助于系统实现高内聚、低耦合的设计目标。
2、开闭原则
软件实体应对拓展开放,对修改关闭。
//这样的代码就很不方便扩展,如果有其他的通知需要可能就要重写notice方法,我们可以通过策略模式,让代码能更方便的扩展。
class AccountSignIn {
public void signIn() {
// 注册的逻辑
// 通知的逻辑
String type = "手机号";
// or String type = "邮箱";
notice(type);
}
void notice(String type) {
if (type.equals("手机号")) {
}
if (type.equals("邮箱")) {
}
if (type.equals("other")) {
}
}
}
//这样就可以很方便的扩展了
class AccountSignIn {
INotice notice;
AccountSignIn(INotice notice) {
this.notice = notice;
}
public void signIn() {
// 注册的逻辑
// 通知的逻辑
notice.notice();
}
}
interface INotice {
void notice();
}
class EmailNotice implements INotice {
public void notice() {
}
}
class SMSNotice implements INotice {
public void notice() {
}
}
3、里氏代换原则
所有引用基类的地方必须能透明的使用其子类对象。
// TODO 结合代码示例
4、接口隔离原则
客户端不应该依赖那些它不需要的接口
一个接口由不同的类实现,确保接口单一角色。使接口更加灵活。
5、合成复用原则
优先使用对象组合,而不是通过继承达到复用目的。
6、迪米特法则
每一个软件单位对其他单位都只有最少的知识,而且局限于那些与本单位密切相关的单位。
详见中介者模式,通过中间类设计实现。
参考
- Java设计模式(第一版) 刘伟
- 最全设计模式 LoveLion