接口作用
接口起到了约束和抽象出功能的作用约束
约束
例如java中collection接口继承iterable接口,使得集合都具有迭代器遍历的功能抽象出功能。当继承了iterable接口的时候,这些集合类都拥有了这项功能,迭代器遍历的功能
抽象出功能
例如线程中,要实现一个线程需要继承thread,然后写其中的run方法,这时可以把run方法抽象出来,用一个接口Runnable接口定义run方法,当Thread继承了这个接口,这时我们可以在构造方法中传入runnable的实现类,使得run方法可以从中抽象出来
策略模式
这其实也算是接口的第三个作用
1 2 3 4 5 6 7 8 9 10 11 |
public class Context { private Strategy strategy; public Context(Strategy strategy){ this.strategy = strategy; } public int executeStrategy(int num1, int num2){ return strategy.doOperation(num1, num2); } } |
主函数
1 2 3 4 5 6 7 8 9 10 11 12 |
public class StrategyPatternDemo { public static void main(String[] args) { Context context = new Context(new OperationAdd()); System.out.println("10 + 5 = " + context.executeStrategy(10, 5)); context = new Context(new OperationSubtract()); System.out.println("10 - 5 = " + context.executeStrategy(10, 5)); context = new Context(new OperationMultiply()); System.out.println("10 * 5 = " + context.executeStrategy(10, 5)); } } |
理解
其实算是抽象出功能的一种延申,策略模式将很多功能组合起来(通过很多类去实现一个接口,每个类中实现不同的功能),这些类等待着被使用。而最常见的使用方式(不被外界发现,类似spring中的注入,我所写的类中需要哪个功能,就将哪个功能对应的类注入到我的类中)。说简单点,就是我的类中存在一个接口变量,然后要对其进行赋值,构造函数中则传入前面的功能实现类。这就是策略模式。