设计模式学习与实践
主要参考:
什么是设计模式:从实践经验中总结而来的,代码设计的方式。
为什么需要设计模式:设计模式是代码设计人员的经验结晶,它提供了开发者认识程序的共同平台,也方便我们学习代码设计的最佳解决方案。
学习方式:学习概念的同时使用js进行实践
设计模式的类型
创建型模式
提供创建对象的同时隐藏创建逻辑的方式
- 工厂模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
结构型模式
关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
- 适配器模式
- 桥接模式
- 过滤器模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
行为型模式
关注对象之间的通信
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 空对象模式
- 策略模式
- 模板模式
- 访问者模式
J2EE 模式
关注表示层(?)
- MVC 模式
- 业务代表模式
- 组合实体模式
- 数据访问对象模式
- 前端控制器模式
- 拦截过滤器模式
- 服务定位器模式
- 传输对象模式
设计模式的原则
强调降低依赖、降低耦合
- 开闭原则:对扩展开放,对修改关闭
- 里氏代换原则(LSP):只有当派生类(子类)替换基类时,软件单位的功能不受影响时,基类才能真正的被复用
- 依赖倒转原则(DIP):参考 依赖于抽象而不依赖于具体,简单来说就是最好不要写死一个接口的功能,而是要通过一个抽象的类方法的子类重写来实现,这样就可以依赖于抽象而不依赖于具体。避免了对底层代码的修改,也减少了底层代码与api的耦合。
- 接口隔离原则(ISP):使用多个隔离的接口,比使用单个接口好。
- 最少知道原则、迪米特原则(DP):一个实体要尽量少的与其他实体发生相互作用,使得系统功能相对独立
- 合成复用原则(CRP):尽量使用合成聚合的方式,而不是继承
创造型模式详解
工厂模式
创建一个工厂根据传入的参数来判断是要创建哪一个类。可以用来处理同一个类会有很多不同的实例的情况
优点:1. 创建对象简单,只需要知道实例名称,而不需要单独去找类名 2. 不需要关心内部构造 2. 扩展性好 3. 屏蔽具体实现
缺点:1. 类的个数成倍增加 2. 增加了系统具体类的依赖
复杂对象适合工厂模式,简单对象直接new会更好一点。
1 | class Shape { |