gpt4 book ai didi

java - 装饰设计和工厂设计模式

转载 作者:行者123 更新时间:2023-11-30 01:53:06 25 4
gpt4 key购买 nike

我试图弄清楚如何使用用户输入并根据用户输入输出某些信息。有人可以提供一个在简单的披萨店使用装饰器模式的简单示例吗?

所以我知道如何使用装饰器模式,只是用户输入部分让我陷入困境。假设用户想要制作披萨,他们会首先选择披萨的大小,然后根据需要添加ASB许多配料。然后,当他们完成后,他们将看到所添加内容的总价格以及所添加内容(如收据)。这是在Java中。

最佳答案

让我们从以下几点开始

  1. 最纯粹的装饰器模式旨在增强对象在运行时的现有行为,而不破坏对象的现有接口(interface)
  2. 装饰意味着增强对象的现有行为。
  3. 被装饰的对象与被装饰的基本对象具有相同的(基本)接口(interface)。

问题:对象是从编译时的类派生的。现在您将如何继续增强行为?

答案:通过使用装饰器模式,也称为包装器。

示例:您有一个可以加密的文件,假设当前加密方法有 5 种,则结果将是加密文件。加密的文件可以再次加密。另外,我们假设有 5 种方法来压缩文件,并且以后还会增加。一个文件可以通过methodEA加密,然后可以通过MethodZA压缩,然后再次可以通过methodEB加密,相似的序列可以产生不同的结果文件。

其中一个好方法如下。

public class TextFile{
public void create(){/*somecode*/};
public void format(){//code for default plain text};
}

public class AEncryptedFile extends TextFile{
private TextFile wrapped;
public AEncryptedFile(TextFile file){
this.wrapped = file;
}
public void format(){
super.format();
//add enhacements for encryption type A
}
}

public class BEncryptedFile extends TextFile{
private TextFile wrapped;
public BEncryptedFile(TextFile file){
this.wrapped = file;
}
public void format(){
super.format();
//add enhacements for encryption type B
}
}

public class AZippedFile extends TextFile{
private TextFile wrapped;
public BEncryptedFile(TextFile file){
this.wrapped = file;
}
public void format(){
super.format();
//add enhacements for zip type A
}
}

public class BZippedFile extends TextFile{
private TextFile wrapped;
public BEncryptedFile(TextFile file){
this.wrapped = file;
}
public void format(){
super.format();
//add enhacements for zip type B
}
}

public void UserClass{
public static void main(String[] args){
TextFile file = new BZippedFile(new AEncryptedFile(new TextFile()));
file.format();
}

在上面的示例代码中可以这样说

TextFile 对象已由 AEncryptedFile 对象装饰(通过包装),该对象又由 BZippedFile 进一步装饰,在每个装饰中,都对现有对象进行了额外的增强

这样,现有的 TextFile 对象可以在运行时传递给各种方法,并且可以通过将其包装在 TextFile 子类型的另一个对象中来装饰该对象。

注意:装饰器模式实现具有 LinkedList 结构。

关于java - 装饰设计和工厂设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55389996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com