设计模式

创建形设计模式

简单工厂

不是一个真正的模式 但是和抽象工厂和工厂方法模式一样,它经常被用于封装创建对象的代码。

  • 不属于 23 种设计模式
  • 为方便理解工厂及抽象工厂做铺垫
  • 方法根据传入的参数获取对应的对象
  • 缺点:每添加一个产品就需要修改简单工厂类

工厂方法

工厂方法模式 定义了一个创建对象的接口,但由子类决定实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

  • 实例化不同的工厂生产不同的产品
  • 工厂模式使对象创建过程延迟到子类进行
  • 如果需要扩展,则只需要增加新的工厂类和产品文件就行
  • 缺点:增加一个产品,就需要增加一个工厂,会使得类文件越来越多

适用场景:任何需要生成复杂对象的地方,都可以使用工厂方法模式

抽象工厂

抽象工厂模式 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

单例模式

建造者模式

原型模式

行为型设计模式

策略模式

策略模式 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

解释器模式

观察者模式

观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新

责任链模式

访问者模式

结构型设计模式

装饰器模式

装饰者模式 动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

外观模式

外观模式 提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用

适配器模式

适配器模式 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间

代理模式

代理(虚拟)

虚拟代理 作为创建开销大的对象的代表。虚拟代理经常直到我们真正需要一个对象的时候才创建它。当对象在创建前和创建中时,由虚拟代理来扮演对象的替身。对象创建后,代理就会将请求直接委托给对象。

代理(远程)

远程代理 就好比远程对象的本地代表

代理(保护)

保护代理 为另一个对象提供一个替身或占位符以访问这个对象。

组合模式

组合模式 允许你将对象组合成树形结构来表现"整体/部分"层次结构。组合能让客户以一致的方式处理个别对象及对象组合。

其它

单件

单件模式 确保一个类只有一个实例,并提供一个全局访问点

命令

命令模式 将"请求"封装成对象,以便于使用不同的请求,队列或者日志来参数化其它对象。命令模式也支持可撤销的操作。

模版方法

模版方法模式 在一个方法中定义一个算法的骨架,而讲一些步骤延迟到子类中。模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

迭代器

迭代器模式 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

状态

状态模式 允许对象在内部状态改变时改变他的行为,对象看起来好像修改了它的类

MVC

一个复合模式 模式-视图-控制器模式(MVC)把一个应用分成三个截然不同的组件:模型、视图和控制器。