gpt4 book ai didi

java 带有装饰器模式的条件日志记录

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:42 26 4
gpt4 key购买 nike

我有一个需要进行条件记录的用例,所以这意味着我有方法 bark() ,它会接受 Animal ,如果我经过狗,它应该记录类似狗在吠叫的内容。因此,根据对象的类型,日志语句会发生变化。可以做的一件事是检查对象的类型并基于该类型进行日志记录,但这可能不是一种非常有效的方法。那么无论如何,这个用例是否可以通过装饰器模式来解决,或者是否有更好的方法来解决这个问题。

最佳答案

老实说,我发现它完全基于意见,我不认为我想创建一个类来包装 Animal 对象。

但是,当您已经编写了大部分代码并且突然觉得应该做一些额外的事情时,我发现装饰器模式很有用。所以这里的重构就变成了一件繁琐的工作。我发现这种情况最适合装饰器模式。

根据你的问题:

I have a use case where I need to do conditional loggging, so what that means is lets say I have method bark() which would accept Animal

我会使用与您相同的方法,但方式略有不同......

<小时/>

您可以创建一个名为 SpeakingAnimal 的界面并使用它:

public interface SpeakingAnimal extends Animal {
public void saySomething();
}

public class Doge implements SpeakingAnimal {
public void saySomething() {
System.out.println("So Java! Very Technic! Wow!");
}
}

如果您不选择使用 Animal 扩展 SpeakingAnimal,您可以:

public interface SpeakingAnimal {
public void saySomething();
}

public class Dog implements Animal, SpeakingAnimal {
public void saySomething() {
System.out.println("Doggy woof woof");
}
}

因此,您可以在 bark() 方法中执行此操作:

public void bark(Animal animal) {
if (animal instanceof SpeakingAnimal)
((SpeakingAnimal) animal).saySomething();
}

关于java 带有装饰器模式的条件日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40740609/

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