我有一个util类,它与接口Isupplier耦合。
类 Util<T extends Isupplier>
它有一个方法execute,其中有一个实现Isupplier的对象列表。
execute(List<T extends Isupplier> objList )
有一些类实现了Isupplier中的方法,还有一个caller类,它为每个实现类调用execute方法。还有一个caller类,它为每个实现类调用execute方法。
Class A implements Isupplier
Class B implements Isupplier
Class ACaller{
//calls Util.execute(List of Object A)`
}
Class BCaller{
//calls Util.execute(List of Object B)`
}
这可以称为策略模式的使用吗?因为我们是针对一个接口进行编码的。策略可以是Isupplier的实现。Base Strategy作为Isupplier。Context为Util?
的定义。"策略是一种行为设计模式,它将一组行为转化为对象,并使它们在原有的上下文对象中可以互换。同时,它也是一种设计模式,可以使算法的行为在运行时被选择。"
重述......这通常是由一个接口来完成的,这个接口持有一个方法,还有一些实现类,每个类都有一些不同的味道(内涵逻辑)。然后是客户端代码,可以根据实现类来驱动算法行为。
以下是其中的一个小例子。
interface Printer {
void print();
}
class LaserPrinter implements Printer {
void print() {
Sysout("laser printed");
}
}
class InkjetPrinter implements Printer {
void print() {
Sysout("ink printed");
}
}
class Client {
Printer printer;
if laserprinter
printer = new LaserPrinter();
else
printer = new InkjetPrinter();
}
注1.这只是一个片段,不是具体的例子。这只是一个片段,不是一个具体的例子,通常情况下,当使用setter时,即使没有if-else或switch,也可以实现策略,从而改变算法行为。
现在来回答你的问题。是的你的例子中使用了策略模式,你的类A和类B实现了ISupplier,因此他们会在方法 "execute "中加入自己的味道,而你的类Util只是一个包装器,因此你在运行时改变了执行方法的行为。
你的类A和类B实现了ISupplier,因此他们会在 "execute "方法中加入自己的味道,而你的类Util只是一个包装器,因此你在运行时改变了execute方法的行为。
注2:正如jaco0646所提到的,Util类不是面向对象的,所以你可以有一个带有setter的类来接受ISupplier的具体对象,并以此来决定execute必须做什么。
参考文献
Regards,Sabareesh M
每个概念的定义。
因此,现在很明显 Java 绑定的属种 是获得 参数多态性,确保一个参数实现或扩展了一个具体的类接口,这与一个 战略模式它是一种有用的技术,可以在运行时选择要执行的行为类。
你是 不 我知道你可以使用多态来实现相同的Isupplier接口的类,但是策略模式和你的方法的主要区别在于,策略模式会在运行时根据相同的条件,在objList对象中选择一个,但是只执行一个,而不是执行整个对象列表。
execute(List<T extends Isupplier> objList)
策略模式会在运行时根据相同的条件 在objList对象中进行选择 它将执行选择的一个对象,但只有一个,而不是执行整个对象列表。