1 回答

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
您需要按照您設(shè)置的順序展開。如果先壓縮然后加密,則需要解密然后解壓縮。
此特定代碼的快速修復(fù)方法是更改您的recuperar方法CompressaoDecorator
class CompressaoDecorator extends Decorator
{
public function recuperar($texto): string
{
return parent::recuperar($this->descomprimir($texto));
}
}
如果你想抽象地解決這個(gè)問題,我會(huì)用一個(gè)可以保證訂單的工廠來處理這個(gè)問題。為此,我認(rèn)為單個(gè)對象本身不應(yīng)該關(guān)心parent,工廠應(yīng)該完成鏈接事物的工作。
編輯
實(shí)際上,當(dāng)我更多地考慮這一點(diǎn)時(shí),您不需要工廠,您只需將所有方法的順序交換即可recuperar,因此這個(gè)也會(huì)改變:
class CriptoDecorator extends Decorator
{
public function recuperar($texto): string
{
return parent::recuperar($this->decrypt($texto));
}
}
這應(yīng)該允許您首先調(diào)用加密或壓縮,并且只要您使用相同的鏈,相反的操作也應(yīng)該起作用。
- 1 回答
- 0 關(guān)注
- 146 瀏覽
添加回答
舉報(bào)