ColdFusion MX中ColdFusion组件(CFCs)的引入,开启了在CF中面向对象编程的新篇章。在应用开发人员和程序员开始思考面向对象编程(OOP)时,总会提到设计模式的概念。
在这样的背景下,本文中我们将讨论一下状态模式:它的目的是什么,可以解决什么问题,以及如何利用CFCs实现。同时,本文这里包含了一些示例代码。你还可以从此文的下载版中得到这些代码。
问题描述
首先,我们来看一个问题,这个问题可能会使我们考虑用状态模式作为解决方案。在我的例子中,我将创建一个简单的内容治理系统,系统中的内容项可能包含这样几个状态:起草、预览、等待发行许可、已发行。内容项还可以包含多个要执行的方法:保存、许可该项、拒绝该项等。我们需要根据内容项不同的状态和将要执行的方法,分别以不同的方式做出反应。
我们可以有几种方法解决这个问题。第一种可能的方法是为每种状态与行为组合创建不同的方法。CFS内容项如列表A所示,列表B显示了使用CFC的测试运行结果。
列表 A
<cfcomponent name="MethodExplosionContentItem" hint="I am a per-reqeust CFC that represents a Content Item, but does not use the State pattern.">
<cffunction name="init" access="public" returntype="MethodExplosionContentItem" hint="Constructor.">
<cfreturn this />
</cffunction>
<cffunction name="saveDraft" access="public" returntype="void" output="true" hint="">
<cfoutput>
Draft: saving content item...<br/>
</cfoutput>
</cffunction>
<cffunction name="savePublished" access="public" returntype="void" output="true" hint="">
<cfoutput>
Published: setting the content to draft mode...<br/>
</cfoutput>
</cffunction>
<cffunction name="approveDraft" access="public" returntype="void" output="true" hint="">
<cfoutput>
Draft: saving content item and alerting reviewer about content for review...<br/>
</cfoutput>
</cffunction>
<cffunction name="approveReview" access="public" returntype="void" output="true" hint="">
<cfoutput>
Review: alerting content author that content is approved...<br/>
Review: marking content as ready for publish approval...<br/>
</cfoutput>
</cffunction>
<cffunction name="approvePublishApproval" access="public" returntype="void" output="true" hint="">
<cfoutput>
Publish approval: Marking content as deployed...<br/>
Publish approval: Pushing live and updating content cache...<br/>
</cfoutput>
</cffunction>
<cffunction name="rejectReview" access="public" returntype="void" output="true" hint="">
<cfoutput>
Review: alerting content author that content is rejected...<br/>
评论加载中…
![]() |