策略模式定义了一个代表解决特殊任务算法的对象。
Introduction(介绍)
在面向对象的应用程序里,很多时候当一个新的任务被确定,程序员的第一反应通常是去创造一个新的类去展示它。然而,不久以后,新的类会演变为包含很多子功能(类),而每一个子功能(类)又进一步增加了原来类的复杂性。在某些情况下,这些子功能(类)也许很多都是可以切换的。举一个Logger类的例子:本来Logger类是用来向一个文件夹里写日志信息的。后来可能会去扩展它的功能,让它可以去记录到许多别的东地方例如:File 和 Datebase.一个额外的需求可能还要允许写入的信息用不同的方式进行格式化例如:a simple String, XML, serialised data, 或者是 HTML.
我们的类现在有一个主要的任务--记录日志,和两个独特的子功能--格式化记录的内容和记录到指定的地方。每一个子功能有许多不同的实现。策略模式建议采用一种实现类结构的手段,这种手段能避免程序员在实现灵活的结构拓展中遇到一些普遍的缺陷,于此同时还帮助程序员能够驾驭这种灵活性,并且易于将来对结构的扩展 .此外,策略模式展示了如何构建比简单子类更强大的类。
最核心的,也非常的简单是我们的Logger类。不论怎么样我们重构和扩展Logger类,我们应该针对维护一个简单的接口。PHP5提供了一种强制执行一个接口的能力。它可以简单到只创建一个接口去使所有可能是的具体实现Logger类必要遵循。
interface iWriter {
public function write();
}
没有必要去花费太多的时间讲解接口。所有实现接口的类必须要实现接口中所有定义的方法。如果没有的话将会有一个致命的错误。我们定义了一个iWriter接口而不是iLogger,稍后会有一个更一般的描述和也许可能反复的用于其它的类。
定义完一个接口之后,让我们来再次访问Logger类。我们的最原始的Logger类也许看起来是这样:
class Logger {
private $file = null;
public function __construct($file) {
$this->file = $file;
}
public function write($message) {
file_put_contents($this->file, array(PHP_EOL, $message), FILE_APPEND);
}
}
这个类非常的简单。它实例化一个本地的文件去存储log信息。当Logger::write()被调用,它会打开你所设定的文件并且会把你的$message参数值加在该文件的最后。
它的使用非常的简单:
$logger = new Logger('./tmp/mylog.txt');
$logger->write('This is a log message!');
需要在当前文件下建立tmp文件,在tmp文件下建立mylog.txt
以上为记录日记的方法,接着我们来扩展它。来真正是使用策略模式实现简单的扩展,而不用影响其他的实现类。
未完待续……
分享到:
相关推荐
策略模式是设计模式中的一种行为模式,它在Java编程中被广泛应用,...在"Java Patterns - Strategy.rar_strategy"这个资源中,你可以找到关于策略模式的深入理解和实践案例,帮助你在实际开发中更好地运用这一模式。
这个压缩包"DesignPatterns"可能包含了关于策略模式的详细示例代码,包括如何创建策略接口、具体策略类以及如何在上下文类中使用这些策略。通过阅读和分析这些代码,你可以更深入地理解策略模式的工作原理和应用场景...
- 策略模式(Strategy):定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法的变化独立于使用它的客户。 - 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中,我们创建表示各种策略的对象和一个行为根据...
行为型模式主要涉及对象间职责的分配,如观察者(Observer)、策略(Strategy)和访问者(Visitor)等。 "pattern-java.pdf"这本书可能详细介绍了这些模式的实现和应用。在Java中,设计模式通常结合面向对象特性,...
- 策略模式(Strategy):定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可以独立于使用它的客户而变化。 - 模板方法模式(Template Method):在一个方法中定义一个算法的骨架,...
文件列表中的"Patterns"可能包含了一些关于策略模式和其他设计模式的示例代码或者讨论。这些文件可以帮助我们更好地理解如何在实际项目中应用策略模式,以及如何与其他设计模式结合使用。 总结来说,策略模式是一种...
17. **策略模式(Strategy)**:定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换,策略对象改变对象的行为方式。 18. **模板方法模式(Template Method)**:在一个方法中定义一个算法的骨架,而将一些...
- 策略模式(Strategy):定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换,让算法的变化独立于使用算法的客户。 - 模板方法模式(Template Method):在一个方法中定义一个算法的骨架,而将一些...
- **策略**(Strategy):定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。 - **模板方法**(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 - **访问者**(Visitor):...
命令模式(Command),解释器模式(Interpreter),迭代器模式(Iterator),中介者模式(Mediator),备忘录模式(Memento),观察者模式(Observer),状态模式(State),策略模式(Strategy),模板方法模式...
### 四、策略模式(Strategy Pattern) 策略模式定义了一系列算法,并将每一个算法封装起来,使它们可以互换。策略模式让算法独立于使用它的客户而变化。在Java中,可以通过定义一个接口来表示不同的算法,然后创建...
行为型模式(Behavioral Patterns):这类模式定义了对象之间的交互和责任分配,如责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式...
策略模式(Strategy)让算法可以在运行时选择不同的实现;观察者模式(Observer)定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新;职责链模式(Chain of ...
3. **行为型模式**:行为型模式着重于对象之间的责任分配和通信,包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式...
3. 行为型模式:关注对象之间的责任分配和交互,如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录...
- 策略模式(Strategy):定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。 - 倒置控制模式(Inversion of Control,IoC):也被称为依赖注入,是一种设计思想,它可以使程序的组件之间解耦。 ...
1. **策略模式**(Strategy):定义一系列算法,并将每个算法封装起来,使它们可以互相替换。 2. **模板方法模式**(Template Method):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 3. **观察者...
- 策略模式(Strategy):定义一系列算法,并将每个算法封装起来,使它们可以相互替换。 - 模板方法模式(Template Method):在一个方法中定义一个算法的框架,允许子类在不改变算法结构的情况下重定义特定步骤。...