java - java有界泛型与策略模式之间的区别
问题描述
我有一个与接口 Isupplier 耦合的 util 类。
班级Util<T extends Isupplier>
它有一个方法 execute,它有一个实现 Isupplier 的对象列表。
execute(List<T extends Isupplier> objList )
有一些类实现了 Isupplier 中的方法。还有一个调用者类,它为每个实现类调用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的实施。作为供应商的基本战略。上下文作为 Util?
解决方案
您在示例中的案例看起来Decorator Pattern
比策略模式更多。
为了确定两者之间的区别,我向您推荐一个好的来源(不要认为我不知道自己的想法,但维基百科是一个很好的有信誉的来源);
我实际上已将您的案例转化为实际运行的代码,如下所示。我还将尝试澄清为什么这不是策略模式。
ISupplier.java:
public interface ISupplier {
void supply() ;
}
A.java
public class A implements ISupplier {
private String name = null ;
public A(String supplierName) {
name = supplierName;
}
public void supply() {
System.out.println( name+ " Supplies from China!" );
}
}
Util.java
import java.util.*;
public class Util <T extends ISupplier> {
public void supply() {
System.out.println( " Util Context!" );
}
public void execute(List<ISupplier> objList ) {
for (ISupplier supplier : objList) {
supplier.supply();
}
}
}
ACaller.java
import java.util.*;
public class ACaller {
Util util = null;
List<A> listOfA = null;
public ACaller(Util ut) {
util = ut;
}
public void fillListA() {
listOfA = new ArrayList<A>();
listOfA.add(new A("A-1"));
listOfA.add(new A("A-2"));
}
public void run() {
util.execute(listOfA);
}
public static void main(String[] args) {
Util strategy1 = new Util();
ACaller ac = new ACaller(strategy1);
ac.fillListA();
ac.run();
}
}
当您运行此代码时;你会得到:
$ java ACaller
A-1 Supplies from China!
A-2 Supplies from China!
Util 类没有提供任何收益,而是充当调用者和供应商之间的另一个静态中介。
在实际运行的策略模式中,我们希望 Context (Util) 为解决方案动态提供不同的 supply() 方法..
换句话说,我们没有办法从Util 类中提供 supply() 方法的动态实现。
简而言之,您的案例似乎更接近装饰者模式,而不是策略模式,因此不是策略模式。
请注意,两种模式都使用接口,所以仅仅因为您正在写入接口,并不意味着......
干杯
推荐阅读
- mysql - MYSQL:拆分字符串,出现次数可变
- amazon-web-services - 物联网规则正在向 SNS 发送消息,但 SNS 无法发送通知
- elasticsearch - 是否可以从 .dat 文件恢复 ElasticSearch 快照?
- list - 使用反斜杠修改列表项时 Ansible 出错
- python - 分析列的高度差异并在 Python 中选择最大差异
- javascript - Konva - 清除图层但保留背景
- php - 重新计算mysql中的运行量
- javascript - 为什么使用生成器时 const 的值会发生变化?
- python - Bitbake:如何构建特定的 python3 配方
- java - java - 如何在java spring的列表中有效重复元素?