什么是设计模式?
GOF这样定义模式:模式就是表示特定情境、问题、与方案之间的关系。
那设计模式是什么呢?
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
GoF(“四人帮”,指Gamma, Helm, Johnson & Vlissides, Addison-Wesley四人)的《设计模式》(1995年出版)是第一次将设计模式提升到理论高度,并将之规范化,本书提出了23种基本设计模式,自此,在可复用面向对象软件的发展过程中,新的大量的设计模式不断出现。
GOF23中基本设计模式中策略模式和状态模式应该是很常用的,但是这两种模式之间很神似,但又有不同。
策略(Strategy)模式
策略模式属于对象的行为模式【GOF95】。其用意是针对一组算法,将每一个算法封装在具有共同接口的独立的类中,从而使他们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
图1. 策略模式类图
策略模式涉及到三种角色:
环境角色(Context)角色:持有一个Strategy的应用;
抽象策略(Strategy)角色:通常由一个接口或抽象类来实现,给出所以具体策略类所需要的接口;
具体策略(ConcreteStrategy)角色:实现抽象策略,包装了相关的算法或行为。
策略模式的应用场景:
1。一个系统要在几个算法中动态选取其中一个。
2。一个对象有过多的行为,复杂的条件转移语句。
状态(state)模式
状态模式也是对象的行为模式【GOF95】。状态模式将所研究对象的行为包装到不同的状态对象中,每个状态对象都属于抽象状态类的一个子类。其意图是让一个对象在其内部状态发生改变的是,其行为也随之改变。
图2. 状态模式类图
状态模式所涉及的角色也有三种:
环境(Context)角色:定义客户端感兴趣的接口,持有一个具体状态类的实例,这个具体状态类实例给出此环境对象的现有状态;
抽象状态(State)角色:定义接口,封装环境对象的一个特定状态所对应的行为;
具体状态(ConcreteState)角色:实现环境的一个状态所对应的行为。
状态模式的应用场景:
1。一个对象的行为依赖于他当前所处的状态,对象的行为必须随着状态的改变而改变;
2。对象在某个方法离依赖于一重或多重的条件转移语句,其中有大量代码。可以通过状态模式,将条件转移语句的每一个分支都包装到一个单独的类中,这使得所有的条件转移语句分支能够以类的方式独立存在和演化,这些类的改到不会影响到系统的其他部分。
比较
策略模式和状态模式从类图上看很像,非常容易混淆。
他们的相同之处:
1。环境都是持有一个抽象接口,而行为封装到具体的实现类中;
2。都符合开闭原则和里氏代换原则。
差异:
1。策略模式是一旦环境(context)选择了一个具体实现,在其生命周期就一般不会改变;而状态模式是环境有明显的状态迁移,这时行为就会随状态而变;
2。策略模式是环境类自己主动选择的具体策略类;而状态模式是被动的改变状态。
- 大小: 20.8 KB
- 大小: 14.3 KB
分享到:
相关推荐
本文将重点介绍标题中提到的五种设计模式:建造者模式、代理模式、观察者模式、策略模式以及状态模式。 **1. 建造者模式(Builder)** 建造者模式是一种创建型设计模式,它允许我们分步骤构建复杂对象,而无需暴露...
如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、状态模式(State)、职责链...
JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建模式是指在创建对象时使用的模式,包括 Factory(工厂模式)、Singleton(单例模式)、Builder(建造者模式)、Prototype(原型模式...
本系列视频“C#设计模式视频21-23”聚焦于三种行为型设计模式:访问者模式(Visitor Pattern)、策略模式(Strategy Pattern)以及状态模式(State Pattern)。这些模式都是为了提高代码的灵活性、可维护性和可扩展...
AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) ...Strategy ( 策略模式 ) TemplateMethod ( 模板方法 ) Visitor ( 访问者模式 )
创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4.... 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)
备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) 单例模式(Singleton Pattern) 迭代器模式(Iterator Pattern) 访问者模式(Visitor ...
包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...
23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” ...策略模式(Strategy) 模板方法模式(Template Method) 访问者模式(Visitor)
在书中,作者们将这二十三种设计模式分成了三类,分别是创建型模式、结构型模式和行为型模式。 创建型模式包含了: 工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ...
8. 状态模式(State):状态模式允许对象在其内部状态改变时改变其行为,对象看起来似乎修改了它的类。这使得对象能够根据其当前内部状态动态地改变其行为。 9. 策略模式(Strategy):策略模式定义了一系列算法,...
包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy...
在本文中,我们将重点探讨状态模式的设计意图、适用性、相关模式、以及与策略模式(Strategy Pattern)之间的比较。 状态模式主要的意图是允许一个对象在其内部状态改变时改变它的行为,使得对象看起来似乎修改了它...
关注对象之间的责任分配和通信,包括策略模式(Strategy)、模板方法模式(Template Method)、迭代器模式(Iterator)、观察者模式(Observer)、访问者模式(Visitor)、命令模式(Command)、备忘录模式(Memento...
策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4. J2EE 模式 MVC 模式(MVC Pattern) 业务代表模式(Business Delegate Pattern) 数据访问对象模式(Dao ...
23种java版设计模式源码案例.zip 0.目录 创建型模式(creational) 简单工厂(simplefactory) 动态工厂(dynamic) 抽象工厂(abstract) ...策略模式(strategy) 模板模式(template) 访问者模式(visitor)
在书中,作者们将这二十三种设计模式分成了三类,分别是创建型模式、结构型模式和行为型模式。 创建型模式包含了: 工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ...
在书中,作者们将这二十三种设计模式分成了三类,分别是创建型模式、结构型模式和行为型模式。 创建型模式包含了: 工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ...
在书中,作者们将这二十三种设计模式分成了三类,分别是创建型模式、结构型模式和行为型模式。 创建型模式包含了: 工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ...