抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

设计模式学习与实践

主要参考:

  1. 菜鸟教程

什么是设计模式:从实践经验中总结而来的,代码设计的方式。

为什么需要设计模式:设计模式是代码设计人员的经验结晶,它提供了开发者认识程序的共同平台,也方便我们学习代码设计的最佳解决方案。

学习方式:学习概念的同时使用js进行实践

设计模式的类型

创建型模式

提供创建对象的同时隐藏创建逻辑的方式

  1. 工厂模式
  2. 抽象工厂模式
  3. 单例模式
  4. 建造者模式
  5. 原型模式

结构型模式

关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

  1. 适配器模式
  2. 桥接模式
  3. 过滤器模式
  4. 组合模式
  5. 装饰器模式
  6. 外观模式
  7. 享元模式
  8. 代理模式

行为型模式

关注对象之间的通信

  1. 责任链模式
  2. 命令模式
  3. 解释器模式
  4. 迭代器模式
  5. 中介者模式
  6. 备忘录模式
  7. 观察者模式
  8. 状态模式
  9. 空对象模式
  10. 策略模式
  11. 模板模式
  12. 访问者模式

J2EE 模式

关注表示层(?)

  1. MVC 模式
  2. 业务代表模式
  3. 组合实体模式
  4. 数据访问对象模式
  5. 前端控制器模式
  6. 拦截过滤器模式
  7. 服务定位器模式
  8. 传输对象模式

设计模式的原则

强调降低依赖、降低耦合

  1. 开闭原则:对扩展开放,对修改关闭
  2. 里氏代换原则(LSP):只有当派生类(子类)替换基类时,软件单位的功能不受影响时,基类才能真正的被复用
  3. 依赖倒转原则(DIP):参考 依赖于抽象而不依赖于具体,简单来说就是最好不要写死一个接口的功能,而是要通过一个抽象的类方法的子类重写来实现,这样就可以依赖于抽象而不依赖于具体。避免了对底层代码的修改,也减少了底层代码与api的耦合。
  4. 接口隔离原则(ISP):使用多个隔离的接口,比使用单个接口好。
  5. 最少知道原则、迪米特原则(DP):一个实体要尽量少的与其他实体发生相互作用,使得系统功能相对独立
  6. 合成复用原则(CRP):尽量使用合成聚合的方式,而不是继承

创造型模式详解

工厂模式

创建一个工厂根据传入的参数来判断是要创建哪一个类。可以用来处理同一个类会有很多不同的实例的情况

优点:1. 创建对象简单,只需要知道实例名称,而不需要单独去找类名 2. 不需要关心内部构造 2. 扩展性好 3. 屏蔽具体实现

缺点:1. 类的个数成倍增加 2. 增加了系统具体类的依赖

复杂对象适合工厂模式,简单对象直接new会更好一点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Shape {
draw():void{}
}
class Circle extends Shape{
draw():void {
console.log("draw Circle")
}
}
class Triangle extends Shape{
draw():void {
console.log("draw Triangle")
}
}
class Square extends Shape{
draw():void {
console.log("draw Square")
}
}
class ShapeFactory {
getShape(type:string):Shape {
switch(type) {
case "Circle":
return new Circle();
case "Triangle":
return new Triangle();
case "Square":
return new Square();
default:
return new Shape()
}
}
}

const sf:ShapeFactory = new ShapeFactory();
const cic:Shape = sf.getShape('Circle');
const triangle:Shape = sf.getShape('Triangle');
const sq:Shape = sf.getShape('Square');
cic.draw();
triangle.draw();
sq.draw();

抽象工厂模式

评论