日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

向导设计模式

發(fā)布時(shí)間:2023/12/3 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 向导设计模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們都喜歡巫師……。 (我的意思是軟件向?qū)?#xff09;。 我們總是很高興跳上那些“下一步”按鈕,就像我們?cè)谖覀兊臅r(shí)髦的小雞上跳舞一樣。 因此,今天我們將您心愛的向?qū)肽木幋a經(jīng)驗(yàn)中。 讓我們跳入一個(gè)例子。

假設(shè)您要設(shè)計(jì)一個(gè)ConservativePerson類。

import java.util.List; class ConservativePerson{ private boolean isVirgin; private boolean isMarried; private List<string> children; ConservativePerson(boolean virgin, boolean married, List<string> children) { this.isVirgin = virgin; this.isMarried = married; this.children = children; } public boolean isVirgin() { return isVirgin; } public boolean isMarried() { return isMarried; } public List<string> getChildren() { return children; } }

因此,它具有一些約束。

  • 他必須結(jié)婚,然后才能...好吧,不是處女。
  • 據(jù)我們所知,在生孩子之前他不能是處女。

在過(guò)去,直到今天基本上都是過(guò)去……,您可能會(huì)為此類定義所有類型的修飾符方法,這些方法會(huì)在不變無(wú)效的情況下引發(fā)異常,例如NotMarriedException和VirginException 。 不再。

今天,我們將使用向?qū)гO(shè)計(jì)模式來(lái)完成此操作 。 我們使用流暢的界面樣式,并在構(gòu)建ConservativePerson對(duì)象時(shí)利用現(xiàn)代IDE的功能來(lái)創(chuàng)建類似向?qū)У母杏X。 我們知道,我們知道,不要再談?wù)摿?#xff0c;并向我們展示代碼……但是在展示向?qū)Тa之前,我們將向您展示其用法,以便您了解我們?cè)谡f(shuō)什么……

public class Main { public static void main(String[] args) { ConservativePersonWizardBuilder wizard = new ConservativePersonWizardBuilder(); ConservativePerson singlePerson = wizard. createConservativePerson(). whichIsSingle(). getObject(); ConservativePerson familyManPerson = wizard. createConservativePerson(). whichIsMarried(). andNotVirgin(). andHasChildNamed("Noa"). anotherChildNamed("Guy"). lastChildName("Alon"). getObject(); } }

現(xiàn)在,它看起來(lái)像一個(gè)普通的流暢接口,但是這里很酷的事情是,只有在當(dāng)前對(duì)象狀態(tài)允許的情況下,方法才可以調(diào)用。 你將不能夠調(diào)用的方法andNotVirgin這意味著如果你有沒有調(diào)用的方法whichIsMarried。
請(qǐng)參見以下屏幕截圖:

在我們聲明他已結(jié)婚之后,我們可以:

這是向?qū)Тa。 我敦促您將其復(fù)制/粘貼到您的IDE中,并嘗試使用它構(gòu)建一個(gè)對(duì)象。

import java.util.ArrayList; import java.util.List; public class ConservativePersonWizardBuilder { private boolean isVirgin; private boolean isMarried; private List<String> children = new ArrayList<String>(); public SetMarriedStep createConservativePerson(){ return new SetMarriedStep(); } class SetMarriedStep { public SetVirginStep whichIsMarried(){ isMarried = true; return new SetVirginStep(); } public FinalStep whichIsSingle(){ isMarried = false; return new FinalStep(); } } class SetVirginStep { public AddChildrenStep andNotVirgin(){ isVirgin = false; return new AddChildrenStep(); } public FinalStep butStillAVirgin(){ isVirgin = true; return new FinalStep(); } } class FinalStep { public ConservativePerson getObject(){ return new ConservativePerson(isVirgin, isMarried, children); } } class AddChildrenStep { public AddChildrenStep andHasChildNamed(String childName) { children.add(childName); return new AddChildrenStep(); } public AddChildrenStep anotherChildNamed(String childName) { children.add(childName); return new AddChildrenStep(); } public FinalStep lastChildName(String childName){ children.add(childName); return new FinalStep(); } } }

如您所見,向?qū)О瑤讉€(gè)步驟。 每個(gè)步驟都由專用的內(nèi)部類表示。 每個(gè)步驟都通過(guò)其方法揭示了合法的可用操作。 然后,每種方法都會(huì)根據(jù)所做的更改返回一個(gè)新步驟。 這樣,將在編譯時(shí)而不是運(yùn)行時(shí)檢測(cè)創(chuàng)建非法對(duì)象的嘗試。

我們的生產(chǎn)代碼中實(shí)際上使用了這種模式。 我想到的一個(gè)示例是MediaJob類。 此類描述對(duì)某些媒體文件的操作。 為了將作業(yè)提交給系統(tǒng),必須創(chuàng)建一個(gè)MediaJob對(duì)象。 問(wèn)題在于,該對(duì)象具有許多參數(shù),這些參數(shù)可以分配與創(chuàng)建非法對(duì)象狀態(tài)的矛盾值。 通過(guò)使用向?qū)J?#xff0c;可以輕松構(gòu)建合法的工作,而無(wú)需了解整個(gè)(復(fù)雜的)約束集。

到此為止。 希望您能嘗試一下。..我們計(jì)劃在不久的將來(lái)對(duì)此進(jìn)行更正式的描述(GOF風(fēng)格)。

參考: DeveloperLife上我們JCG合作伙伴 Nadav Azaria和Roi Gamliel 的向?qū)гO(shè)計(jì)模式


翻譯自: https://www.javacodegeeks.com/2012/01/wizard-design-pattern.html

總結(jié)

以上是生活随笔為你收集整理的向导设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。