推理题库 侦探推理题和答案 http://tuiliti.cn
以下内容是我学习李刚老师的《疯狂Java讲义》之后的笔记。
1.接口(抽象的)
可以包含默认方法,若只有一个方法称函数型接口。
实现、调用抽象接口需要在该类后implements,并且在类中重写@Override接口中的方法。 抽象接口无法实例化,不能放在等号后面,但可以放在等号前面以指定可以调用的方法。
例如:
interface Produce(){
int getTime();
}
public class Printer implements Produce{
@Override
public int getTime(){
return 45;
}
public static void main(String[] args){
Produce p = new Printer();
System.out.println(p.getTime());
}
}
2.简单工厂设计模式
组成(例):
Output抽象接口(抽象接口中默认方法,也就是非抽象方法,需用defualt修饰)。Printer类,它实现了Output接口。Computer类,它借由Output成员构造,当然这个Output成员由Printer实现,所以Output成员调用的方法过程在Printer类中实现,在Computer类中只是提一下名字。
Computer.(由Printer实现的)Output.各方法();当然这些方法也是由Printer实现的。 工厂OutputFactory实际既可以生产Printer(实际就是Output)也能生产Computer,因为Computer借由Output构造。
Computer c = new Computer(Output o);
工厂设置了getOutput()方法,用于生产(实现了Output的)Printer,它本质也是Output。
public Output getOutput(){
return new Printer();
}
注意返回的不是Printer而是Output。
生产新Computer的过程:
OutputFactory of = new OutputFactory(); //实例化工厂
Output newOutput = new of.getOutput(); //工厂生产新Printer,本质也是Output
Computer newComputer = new Computer(newOutput); //生产新Computer
@重要的:
工厂模式使得在后期的维护中,如果我们需要改写输出方法(它们位于Output接口中时是抽象的,在Printer类中被有效的重写),只需要更改Printer类中重写了Output接口的方法就行.
3.命令模式
组成(例):
Command抽象接口,它包含一个process()抽象方法。ProcessArray类,它包含一个exProcess()方法:
public void exProcess(int[] target, Command cmd){
cmd.process(target);
}
这个exProcess()方法借由Command成员构成。它执行了构成此方法的Command成员下的process()方法。
CommandTest类,用于测试的类,包含main。PrintCommand类,它实现了Command抽象接口并重写了其中的process方法,使其能迭代输出数组。AddCommand类,它实现了Command接口并重写了process方法,使其能累计数组成员。
在CommandTest类中,它们被这样调用:
public static void main(String[] args){
ProcessArray pa = new ProcessArray();
int[] target = new int[]{3, -4, 6, 4};
pa.exProcess(target, new PrintCommand());
pa.exProcess(target, new AddCommand());
}
除Print Add以外,还可以新建各种实现Command接口的方法,在其中部署命令,来以不同方式操作数组。需要更改命令的话,只需要修改这些类就行。