java绑定属相与策略模式的差别

问题描述 投票:0回答:1

我有一个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?

java generics design-patterns generic-programming strategy-pattern
1个回答
0
投票

的定义。"策略是一种行为设计模式,它将一组行为转化为对象,并使它们在原有的上下文对象中可以互换。同时,它也是一种设计模式,可以使算法的行为在运行时被选择。"

重述......这通常是由一个接口来完成的,这个接口持有一个方法,还有一些实现类,每个类都有一些不同的味道(内涵逻辑)。然后是客户端代码,可以根据实现类来驱动算法行为。

以下是其中的一个小例子。

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必须做什么。

参考文献

  1. https:/www.geeksforgeeks.orgstrategy-pattern-set-1

  2. https:/refactoring.gurudesign-patternsstrategyjavaexample。

Regards,Sabareesh M


0
投票

对你第一个问题的答复 "java界属与策略模式的区别"

每个概念的定义。

  • Java有界属: 是一个工具,用于限制在参数化的类或方法中可以作为类型参数的类型,确保在编译时安全地执行类型。在你的例子中,你是强制将参数从Isupplier中扩展出来。
  • 策略模式: 是一种行为设计模式,它将一组行为转化为实现相同接口的类(依靠多态性,但这并不意味着它们是相同的东西),并使它们在运行时可以在原始上下文类中互换。继承性强.

因此,现在很明显 Java 绑定的属种 是获得 参数多态性,确保一个参数实现或扩展了一个具体的类接口,这与一个 战略模式它是一种有用的技术,可以在运行时选择要执行的行为类。

对你第二个问题的回答"战略可以是Isupplier的实施。基础战略作为Isupplier。Context as Util"?

你是 我知道你可以使用多态来实现相同的Isupplier接口的类,但是策略模式和你的方法的主要区别在于,策略模式会在运行时根据相同的条件,在objList对象中选择一个,但是只执行一个,而不是执行整个对象列表。

execute(List<T extends Isupplier> objList)

策略模式会在运行时根据相同的条件 在objList对象中进行选择 它将执行选择的一个对象,但只有一个,而不是执行整个对象列表。

© www.soinside.com 2019 - 2024. All rights reserved.