gpt4 book ai didi

oop - 策略模式和访问者模式有什么区别?

转载 作者:行者123 更新时间:2023-12-03 08:32:00 24 4
gpt4 key购买 nike

我很难理解这两种设计模式。

能否请您给我上下文信息或示例,以便我可以清楚地了解并能够映射两者之间的差异。

谢谢。

enter image description here

enter image description here

最佳答案

策略格局就像一个 1:许多关系。当存在一种类型的对象并且我想对其应用多个操作时,我使用策略模式。例如,如果我有一个封装视频剪辑的 Video 类,我可能希望以不同的方式对其进行压缩。所以我创建了一堆策略类:

MpegCompression
AviCompression
QuickTimeCompression
等等。
我想到了 访客模式作为 许多:许多关系。假设我的应用程序不仅包含视频,还包含音频剪辑。如果我坚持策略模式,我必须复制我的压缩类——一个用于视频,一个用于音频:
MpegVideoCompression
MpegAudioCompression
等等...
如果我切换到 访客模式 ,我不必复制策略类。我通过添加方法来实现我的目标:
MpegCompressionVisitor::compressVideo(Video object)    
MpegCompressionVisitor::compressAudio(Audio object)
[更新:使用 Java]
我在 Java 应用程序中使用了访问者模式。结果与上面描述的有点不同。这是此示例的 Java 版本。
// Visitor interface
interface Compressor {

// Visitor methods
void compress(Video object);
void compress(Audio object);
}

// Visitor implementation
class MpegCompressor implements Compressor {

public void compress(Video object) {
// ...
}

public void compress(Audio object) {
// ...
}
}
现在要访问的接口(interface)和类:
interface Compressible {

void accept(Compressor compressor);
}

class Video implements Compressible {

// If the Compressor is an instance of MpegCompressionVisitor,
// the system prints "Mpeg video compression"
void accept(Compressor compressor) {
compressor.compress(this);
}

关于oop - 策略模式和访问者模式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8665295/

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