Status:
Fendy 和 Glen Best 的答案同样被我接受和尊重,但既然可以接受并给予赏金,我选择 Fendy 的答案。
Scenario:
如果我有一些代码必须在许多类(很少有明显的微小参数更改)和并发线程中重复使用多次,那么该采用哪种方法?
必须重用的代码可以是任何理智的东西(适当注意静态和非静态上下文以及方法制作技术)。它可以是一种算法,一种执行连接、操作、关闭的数据库方法。任何事物。
制作一些类似的类
MyMethods.class
并将所有这些方法放入其中。1.a. 直接创建方法
static
和调用(由所有类和并发线程)MyMethods.someMethod();
1.b。制作方法
non-static
并在调用它们时,instantiate
整个类通过MyMethods mm = MyMethods(); mm.someMethod();
使用https://en.wikipedia.org/wiki/Strategy_pattern中所述的策略模式(此处附有代码)。
使用https://en.wikipedia.org/wiki/Dependency_injection#Java中所述的依赖注入
Problems:
有人会说使用这种方法无法进行单元测试 http://en.wikipedia.org/wiki/Unit_testing , 在换出后者时会遇到麻烦。如果你想测试你的类并使用依赖的模拟版本
1.a. 并发调用或多个类会不会有问题?特别
JDBC static methods
只是一个例子?1.b。我认为这会造成太多的内存负载,因为整个类会多次
instanticated
调用一两个方法这超出了我的想象,请解释一下和/或任何优点/缺点
我不想在这个问题的上下文中使用框架.. 这太让我头疼了,请解释一下和/或任何优点/缺点
等待任何其他策略或建议(如果有)。
Request:
请仅在您有经验并深入了解其含义并能够全面地回答时,您的回答才能帮助我和整个社区!
Code:
/** The classes that implement a concrete strategy should implement this.
* The Context class uses this to call the concrete strategy. */
interface Strategy {
int execute(int a, int b);
}
/** Implements the algorithm using the strategy interface */
class Add implements Strategy {
public int execute(int a, int b) {
System.out.println("Called Add's execute()");
return a + b; // Do an addition with a and b
}
}
class Subtract implements Strategy {
public int execute(int a, int b) {
System.out.println("Called Subtract's execute()");
return a - b; // Do a subtraction with a and b
}
}
class Multiply implements Strategy {
public int execute(int a, int b) {
System.out.println("Called Multiply's execute()");
return a * b; // Do a multiplication with a and b
}
}
// Configured with a ConcreteStrategy object and maintains
// a reference to a Strategy object
class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int a, int b) {
return this.strategy.execute(a, b);
}
}
/** Tests the pattern */
class StrategyExample {
public static void main(String[] args) {
Context context;
// Three contexts following different strategies
context = new Context(new Add());
int resultA = context.executeStrategy(3,4);
context = new Context(new Subtract());
int resultB = context.executeStrategy(3,4);
context = new Context(new Multiply());
int resultC = context.executeStrategy(3,4);
System.out.println("Result A : " + resultA );
System.out.println("Result B : " + resultB );
System.out.println("Result C : " + resultC );
}
}