中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

程序員公司seo診斷書案例

程序員公司,seo診斷書案例,備案網(wǎng)站名稱修改,梵克雅寶官網(wǎng)1、簡(jiǎn)介 1.1、概述 在軟件系統(tǒng)中,有些對(duì)象也像水一樣具有多種狀態(tài),這些狀態(tài)在某些情況下能夠相互轉(zhuǎn)換,而且對(duì)象在不同的狀態(tài)下也將具有不同的行為。為了更好地對(duì)這些具有多種狀態(tài)的對(duì)象進(jìn)行設(shè)計(jì),可以使用一種被稱為狀態(tài)模式的設(shè)…

1、簡(jiǎn)介

1.1、概述

在軟件系統(tǒng)中,有些對(duì)象也像水一樣具有多種狀態(tài),這些狀態(tài)在某些情況下能夠相互轉(zhuǎn)換,而且對(duì)象在不同的狀態(tài)下也將具有不同的行為。為了更好地對(duì)這些具有多種狀態(tài)的對(duì)象進(jìn)行設(shè)計(jì),可以使用一種被稱為狀態(tài)模式的設(shè)計(jì)模式。

狀態(tài)模式用于解決系統(tǒng)中復(fù)雜對(duì)象的狀態(tài)轉(zhuǎn)換以及不同狀態(tài)下行為的封裝問(wèn)題。當(dāng)系統(tǒng)中某個(gè)對(duì)象存在多個(gè)狀態(tài),這些狀態(tài)之間可以進(jìn)行轉(zhuǎn)換,而且對(duì)象在不同狀態(tài)下行為不相同時(shí)可以使用狀態(tài)模式。狀態(tài)模式將一個(gè)對(duì)象的狀態(tài)從該對(duì)象中分離出來(lái),封裝到專門的狀態(tài)類中,使得對(duì)象狀態(tài)可以靈活變化。對(duì)于客戶端而言,無(wú)須關(guān)心對(duì)象狀態(tài)的轉(zhuǎn)換以及對(duì)象所處的當(dāng)前狀態(tài),無(wú)論對(duì)于何種狀態(tài)的對(duì)象,客戶端都可以一致性地處理。

1.2、定義

狀態(tài)模式(State Pattern):允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為,對(duì)象看起來(lái)似乎修改了它的類。其別名為狀態(tài)對(duì)象(Objects for States),狀態(tài)模式是一種對(duì)象行為型模式。

2、解析

2.1、UML類圖

在狀態(tài)模式中引入了抽象狀態(tài)類和具體狀態(tài)類,它們是狀態(tài)模式的核心,其結(jié)構(gòu)如下圖所示。
在這里插入圖片描述
可以看出,在狀態(tài)模式結(jié)構(gòu)圖中包含以下3個(gè)角色:

  1. Context(環(huán)境類):環(huán)境類又稱為上下文類,它是擁有多種狀態(tài)的對(duì)象。由于環(huán)境類的狀態(tài)存在多樣性且在不同狀態(tài)下對(duì)象的行為有所不同,因此將狀態(tài)獨(dú)立出去形成單獨(dú)的狀態(tài)類。在環(huán)境類中維護(hù)一個(gè)抽象狀態(tài)類State的實(shí)例,這個(gè)實(shí)例定義當(dāng)前狀態(tài),在具體實(shí)現(xiàn)時(shí),它是一個(gè)State子類的對(duì)象。
  2. State(抽象狀態(tài)類):它用于定義一個(gè)接口以封裝與環(huán)境類的一個(gè)特定狀態(tài)相關(guān)的行為。在抽象狀態(tài)類中聲明各種不同狀態(tài)對(duì)應(yīng)的方法,而在其子類中實(shí)現(xiàn)這些方法。由于不同狀態(tài)下對(duì)象的行為可能不同,因此在不同子類中方法的實(shí)現(xiàn)可能存在不同,相同的方法可以寫在抽象狀態(tài)類中。
  3. ConcreteState(具體狀態(tài)類):它是抽象狀態(tài)類的子類,每個(gè)子類實(shí)現(xiàn)一個(gè)與環(huán)境類的一個(gè)狀態(tài)相關(guān)的行為。每個(gè)具體狀態(tài)類對(duì)應(yīng)環(huán)境類的一個(gè)具體狀態(tài),不同的具體狀態(tài)類其行為有所不同。

2.2、代碼示例

在狀態(tài)模式中,將對(duì)象在不同狀態(tài)下的行為封裝到不同的狀態(tài)類中。為了讓系統(tǒng)具有更好的靈活性和可擴(kuò)展性,同時(shí)對(duì)各狀態(tài)下的共有行為進(jìn)行封裝,需要對(duì)狀態(tài)進(jìn)行抽象,引入了抽象狀態(tài)類角色,其典型代碼如下:

/*** @Description: 抽象狀態(tài)* @Author: yangyongbing* @CreateTime: 2023/08/03* @Version: 1.0*/
abstract class State {// 聲明抽象業(yè)務(wù)方法,不同的具體狀態(tài)類可以有不同的方法實(shí)現(xiàn)public abstract void handle();
}

在抽象狀態(tài)類的子類即具體狀態(tài)類中實(shí)現(xiàn)了在抽象狀態(tài)類中聲明的業(yè)務(wù)方法,不同的具體狀態(tài)類可以提供完全不同的方法實(shí)現(xiàn)。在實(shí)際使用時(shí),一個(gè)狀態(tài)類中可能包含多個(gè)業(yè)務(wù)方法。如果在具體狀態(tài)類中某些業(yè)務(wù)方法的實(shí)現(xiàn)完全相同,可以將這些方法移至抽象狀態(tài)類,實(shí)現(xiàn)代碼的復(fù)用。典型的具體狀態(tài)類代碼如下:

/*** @Description: 具體狀態(tài)* @Author: yangyongbing* @CreateTime: 2023/08/03  19:45* @Version: 1.0*/
public class ConcreteState extends State{@Overridepublic void handle() {// 方法具體實(shí)現(xiàn)}
}

環(huán)境類維持一個(gè)對(duì)抽象狀態(tài)類的引用。通過(guò)setState()方法可以向環(huán)境類注入不同的狀態(tài)對(duì)象,再在環(huán)境類的業(yè)務(wù)方法中調(diào)用狀態(tài)對(duì)象的方法,典型代碼如下:

/*** @Description: 環(huán)境類* @Author: yangyongbing* @CreateTime: 2023/08/03  19:46* @Version: 1.0*/
public class Context {// 持有一個(gè)對(duì)抽象狀態(tài)對(duì)象的引用private State state;// 其它屬性值,該屬性值的變化可能會(huì)導(dǎo)致對(duì)象狀態(tài)發(fā)生變化private int value;// 設(shè)置狀態(tài)對(duì)象public void setState(State state) {this.state = state;}public void request(){// 其它代碼state.handle(); // 調(diào)用狀態(tài)對(duì)象的業(yè)務(wù)方法// 其他代碼}
}

環(huán)境類實(shí)際上是真正擁有狀態(tài)的對(duì)象,這里只是將環(huán)境類中與狀態(tài)有關(guān)的代碼提取出來(lái)封裝到專門的狀態(tài)類中。

在狀態(tài)模式的使用過(guò)程中,一個(gè)對(duì)象的狀態(tài)之間還可以進(jìn)行相互轉(zhuǎn)換。通常有以下兩種實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換的方式:

  1. 統(tǒng)一由環(huán)境類來(lái)負(fù)責(zé)狀態(tài)之間的轉(zhuǎn)換。此時(shí),環(huán)境類還充當(dāng)了狀態(tài)管理器(State Manager)角色。在環(huán)境類的業(yè)務(wù)方法中通過(guò)對(duì)某些屬性值的判斷實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換,還可以提供一個(gè)專門的方法用于實(shí)現(xiàn)屬性判斷和狀態(tài)轉(zhuǎn)換。代碼片段如下:
public void changeState(){// 判斷屬性值,根據(jù)屬性值進(jìn)行狀態(tài)轉(zhuǎn)換if(value==0){this.setState(new ConcreteStateA());}else if(value==1){this.setState(new ConcreteStateB());}
}
  1. 由具體狀態(tài)類來(lái)負(fù)責(zé)狀態(tài)之間的轉(zhuǎn)換。可以在具體狀態(tài)類的業(yè)務(wù)方法中判斷環(huán)境類的某些屬性值再根據(jù)情況為環(huán)境類設(shè)置新的狀態(tài)對(duì)象,實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換。同樣,也可以提供一個(gè)專門的方法來(lái)負(fù)責(zé)屬性值的判斷和狀態(tài)轉(zhuǎn)換。此時(shí),狀態(tài)類與環(huán)境類之間將存在依賴或關(guān)聯(lián)關(guān)系,因?yàn)闋顟B(tài)類需要訪問(wèn)環(huán)境類中的屬性值。代碼片段如下:
public void changeState(Context ctx){// 判斷屬性值,根據(jù)屬性值進(jìn)行狀態(tài)轉(zhuǎn)換if(ctx.getValue()==1){this.setState(new ConcreteStateB());}else if(ctx.getValue()==2){this.setState(new ConcreteStateC());}
}

2.3、共享狀態(tài)

在有些情況下,多個(gè)環(huán)境對(duì)象可能需要共享同一個(gè)狀態(tài)。如果希望在系統(tǒng)中實(shí)現(xiàn)多個(gè)環(huán)境對(duì)象共享一個(gè)或多個(gè)狀態(tài)對(duì)象,那么需要將這些狀態(tài)對(duì)象定義為環(huán)境類的靜態(tài)成員對(duì)象。

下面通過(guò)一個(gè)簡(jiǎn)單實(shí)例來(lái)說(shuō)明如何實(shí)現(xiàn)共享狀態(tài)。如果某系統(tǒng)要求兩個(gè)開關(guān)對(duì)象要么都處于開的狀態(tài),要么都處于關(guān)的狀態(tài),在使用時(shí)它們的狀態(tài)必須保持一致。開關(guān)可以由開轉(zhuǎn)換到關(guān),也可以由關(guān)轉(zhuǎn)換到開。

可以使用狀態(tài)模式來(lái)實(shí)現(xiàn)開關(guān)的設(shè)計(jì),其結(jié)構(gòu)如下圖所示:
在這里插入圖片描述

3、狀態(tài)模式總結(jié)

狀態(tài)模式將一個(gè)對(duì)象在不同狀態(tài)下的不同行為封裝在一個(gè)個(gè)狀態(tài)類中。通過(guò)設(shè)置不同的狀態(tài)對(duì)象可以讓環(huán)境對(duì)象擁有不同的行為,而狀態(tài)轉(zhuǎn)換的細(xì)節(jié)對(duì)于客戶端而言是透明的,方便了客戶端的使用。在實(shí)際開發(fā)中,狀態(tài)模式具有較高的使用頻率,在工作流、游戲等軟件中狀態(tài)模式都得到了廣泛應(yīng)用,例如公文狀態(tài)的轉(zhuǎn)換、游戲中角色的升級(jí)等。

3.1、主要優(yōu)點(diǎn)

  1. 封裝了狀態(tài)的轉(zhuǎn)換規(guī)則。在狀態(tài)模式中可以將狀態(tài)的轉(zhuǎn)換代碼封裝在環(huán)境類或者具體狀態(tài)類中,對(duì)狀態(tài)轉(zhuǎn)換代碼進(jìn)行集中管理,而不是分散在一個(gè)個(gè)業(yè)務(wù)方法中。
  2. 將所有與某個(gè)狀態(tài)有關(guān)的行為放到一個(gè)類中,只需要注入一個(gè)不同的狀態(tài)對(duì)象即可使環(huán)境對(duì)象擁有不同的行為。
  3. 允許狀態(tài)轉(zhuǎn)換邏輯與狀態(tài)對(duì)象合成一體,而不是提供一個(gè)巨大的條件語(yǔ)句塊。狀態(tài)模式可以避免使用龐大的條件語(yǔ)句來(lái)將業(yè)務(wù)方法和狀態(tài)轉(zhuǎn)換代碼交織在一起。
  4. 可以讓多個(gè)環(huán)境對(duì)象共享一個(gè)狀態(tài)對(duì)象,從而減少系統(tǒng)中對(duì)象的個(gè)數(shù)。

3.2、主要缺點(diǎn)

  1. 狀態(tài)模式的使用必然會(huì)增加系統(tǒng)中類和對(duì)象的個(gè)數(shù),導(dǎo)致系統(tǒng)運(yùn)行開銷增大。
  2. 狀態(tài)模式的程序結(jié)構(gòu)與實(shí)現(xiàn)都較為復(fù)雜,如果使用不當(dāng)將導(dǎo)致程序結(jié)構(gòu)和代碼的混亂,增加系統(tǒng)設(shè)計(jì)的難度。
  3. 狀態(tài)模式對(duì)開閉原則的支持并不太好。增加新的狀態(tài)類需要修改那些負(fù)責(zé)狀態(tài)轉(zhuǎn)換的源代碼,否則無(wú)法轉(zhuǎn)換到新增狀態(tài);而且修改某個(gè)狀態(tài)類的行為也需修改對(duì)應(yīng)類的源代碼。

3.3、使用場(chǎng)景

  1. 對(duì)象的行為依賴于它的狀態(tài)(例如某些屬性值),狀態(tài)的改變將導(dǎo)致行為的變化。
  2. 在代碼中包含大量與對(duì)象狀態(tài)有關(guān)的條件語(yǔ)句。這些條件語(yǔ)句的出現(xiàn),會(huì)導(dǎo)致代碼的可維護(hù)性和靈活性變差,不能方便地增加和刪除狀態(tài),并且導(dǎo)致客戶類與類庫(kù)之間的耦合增強(qiáng)。
http://www.risenshineclean.com/news/33710.html

相關(guān)文章:

  • 獨(dú)立網(wǎng)站做外貿(mào)報(bào)價(jià)青島谷歌seo
  • 網(wǎng)站宣傳方案新手seo入門教程
  • 網(wǎng)站的當(dāng)前位置導(dǎo)航如何做正規(guī)的微信推廣平臺(tái)
  • 做視頻網(wǎng)站需要多大帶寬朋友圈廣告推廣平臺(tái)
  • 網(wǎng)站色哦優(yōu)化8888電商如何從零做起
  • 南京服務(wù)好建設(shè)網(wǎng)站哪家好seo快速優(yōu)化方法
  • 網(wǎng)站首頁(yè)結(jié)構(gòu)推廣app軟件
  • ui設(shè)計(jì)做兼職的網(wǎng)站刷推廣鏈接的網(wǎng)站
  • 高性能網(wǎng)站建設(shè)指南 書seo搜索引擎優(yōu)化平臺(tái)
  • 旅游開發(fā) 網(wǎng)站建設(shè)山西網(wǎng)站seo
  • 醫(yī)療網(wǎng)站建設(shè)計(jì)劃書電子商務(wù)網(wǎng)站建設(shè)方案
  • 專業(yè)的外貿(mào)行業(yè)網(wǎng)站制作深圳百度總部
  • 修文縣生態(tài)文明建設(shè)局網(wǎng)站游戲推廣怎么做引流
  • 自己公司網(wǎng)站維護(hù)百度推廣效果
  • 網(wǎng)站空間的控制面板首頁(yè)seo推廣培訓(xùn)
  • 局網(wǎng)站建設(shè)寧波好的seo外包公司
  • 用什么網(wǎng)站做微信推送今日頭條淄博新聞
  • 簡(jiǎn)單的wordpress主題保定關(guān)鍵詞優(yōu)化軟件
  • wordpress 中文兩欄博客主題 style.css狼雨seo網(wǎng)站
  • 上??娝乖O(shè)計(jì)公司官網(wǎng)windows11優(yōu)化大師
  • 中國(guó)建設(shè)銀行官網(wǎng)站企業(yè)網(wǎng)銀營(yíng)銷策劃與運(yùn)營(yíng)
  • 山東大學(xué)網(wǎng)站設(shè)計(jì)與建設(shè)seo排名關(guān)鍵詞
  • 贛州市鐵路建設(shè)辦公室網(wǎng)站湖南靠譜關(guān)鍵詞優(yōu)化
  • 高唐企業(yè)網(wǎng)站建設(shè)北京seo代理計(jì)費(fèi)
  • 鎮(zhèn)江特色seo的基本步驟包括哪些
  • 制作視頻網(wǎng)站開發(fā)電商關(guān)鍵詞工具
  • 小米wordpress東莞seo網(wǎng)站推廣建設(shè)
  • 網(wǎng)站旁邊的小圖標(biāo)怎么做的無(wú)憂seo
  • win server wordpress關(guān)鍵詞優(yōu)化是什么工作
  • 藍(lán)色企業(yè)網(wǎng)站做網(wǎng)站推廣需要多少錢