最近在看设计模式。简单的对二十三种设计模式汇总一下。持续更新中ing.....
一.单例模式:
定义
确保某一个类只有一个实例,而且自行实例化向整个系统提供这个实例。
使用场景
创建一个对象需要消耗的资源过多,如需要访问IO和数据库等资源,这时就要考虑使用单例模式。
二.Builder模式
定义:
将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
使用场景:
a相同的方法,不同的执行顺序,产生不同的事件结构
b多个部件或者零件,都可以装配到一个对象中,但是产生的运行结果又不同时
c产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候使用建造者模式非常合适
d当初始化一个对象特别复杂,如参数多,且很多参数都有默认值时
三.原型模式
定义
用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象
使用场景
a类初始化需要消耗非常多的资源,这个资源包含数据,硬件资源等,通过原型复制避免这些消耗
b通过new产生一个对象需要非常繁琐的数据准备或者访问权限,这时可以使用原型模式
c一个对象需要提供给齐对象访问,而且各个调用者都可能需要修改其值时,可以考虑使用原型模式复制多个使用对象共调用者使用,即保护性拷贝
四.工厂方法模式
定义
定义一个用于创建对象的接口,让子类决定实例化哪个类
使用场景
在任何要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式。
五.抽象工厂模式
定义
为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定它们的具体类。
使用场景
一个对象族有相同的约束时可以使用抽象工厂模式
六.策略模式
定义
策略模式定义了一系列的算法,并将每个算法封装起来,而且使他们可以互相替换。策略模式让算法独立于使用它的客户而独立变化。
使用场景
a针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。
b需要安全地封装多种同一类型的操作时。
c出现同一抽象类有多个子类,而又需要使用if-else或者switch-case来选择具体子类使。
七.状态模式
定义
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了类。
使用场景
a一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为。
b代码中包含大量与对象有关的条件语句,例如,一个操作中含有庞大的多分支语句,且这些分支依赖于改对象的状态。
八.责任链模式
定义
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象链成一条链,并沿着这条链传递请求,直到有对象处理他们。
使用场景
a多个对象处理同一请求,但具体由哪个对象处理则在运行时动态决定。
b在请求处理者不明确的情况下向多个对象中的一个提交请求。
c需要动态指定一组对象处理请求。
九.解释器模式
定义
给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示解释语言中的句子。
使用场景
a如果某个简单的语言需要解释执行而且将该语言中的语句表示为一个抽象语法树时,可以考虑使用解释器模式
b在特定的领域出现不断重复的问题时,可以将该领域的问题转化为一种语法规则下的语句,然后构建解释器来解释该语句