Fog*_*ert 0 java oop design-patterns
我们来看一个现实世界的例子吧.
假设,我有三只狗,但一只狗可能与另一只狗不同.
第一只狗喜欢吠叫和吃东西,第二只狗喜欢玩耍和追逐猫,第三只狗喜欢跑步和慢跑(将这些动作视为方法).
我如何在Java中实现它?我必须使用什么,最佳做法是什么?抽象类,接口或它们两者?
我将它实现为使用单个Dog类和组合 behaviours
public interface Behaviour { void action(); }
public class Bark implements Behaviour {...}
public class ChaseCat implements Behaviour { ... }
public class Eat implements Behaviour {...}
public class Sleep implements Behaviour {...}
... others
public class Dog {
private List<Behaviour> behaviours;
public Dog(Behaviour...behaviors) { this.behaviors = Arrays.asList(behaviours); }
public void play() {
// choose random behaviour
behaviour.action();
}
}
Dog dog1 = new Dog(new ChaseCat(), new Bark());
Dog dog2 = new Dog(new Eat(), new Sleep());
Run Code Online (Sandbox Code Playgroud)
这种方法的好处是,如果您公开管理Dog类行为的方法,您甚至可以在应用程序运行时修改行为.例如,如果一只猫吓到一只狗你可以有一种方法来消除这种行为一段时间,你的狗不会这样做.然后你可以稍后添加它.你明白了.