public interface Fun {
//定义了接口,就是定义了
//接口中的方法都是抽象方法,接口中的方法都是public,而抽象类中可以有实现方法
//接口中的方法缺省的也是public方法。
//不能生产对象。但可以产生对象的引用,用在向上转型。
//实现一个接口不能使用extends,使用implements,
//一类可以实现多个接口,一个接口可以继承多个接口
//一个类实现多个接口用“,”隔开,一个接口继承多个接口也需要使用“,”隔开
//实现一个接口必须实现它所有的函数。
void read();
void writ();
}
//接口的好处:
体现在工厂方法的使用:比如我们有一个接口:Fun,三个实现接口的类functionA、functionB、functionC
Fun有两个方法:read();writ();
/****************************Fun********************************/
package com.outlook;//最后要加“;”
public interface Fun {
void read();
void writ();
}
/****************************functionA********************************/
package com.outlook;
public class functionA implements Fun {
@Override
public void read() {
// TODO Auto-generated method stub
System.out.println("functionA read");
}
@Override
public void writ() {
System.out.println("functionA writ");
// TODO Auto-generated method stub
}
}
/****************************functionB********************************/
package com.outlook;
public class functionB implements Fun {
@Override
public void read() {
// TODO Auto-generated method stub
System.out.println("functionB read");
}
@Override
public void writ() {
System.out.println("functionB writ");
// TODO Auto-generated method stub
}
}
/****************************functionC********************************/
package com.outlook;
public class functionC implements Fun {
public void read() {
System.out.println("functionC read");
// TODO Auto-generated method stub
}
public void writ() {
System.out.println("functionC writ");
// TODO Auto-generated method stub
}
}
/****************************Factory********************************/
package com.outlook;
public class Factory {
static Fun chose(int sort){
Fun fun = null;
if(sort == 3){
fun = new functionC();
}
else if(sort == 1){
fun = new functionA();
}
else if(sort == 2){
fun = new functionB();
}
return fun;
}
}
/****************************Test********************************/
package com.outlook;
public class Test {
public static void main(String[] a){
Fun fun = Factory.chose(2);
fun.read();
fun.writ();
}
}
封装方法:我们只需要通过传入一个参数就能随意调用三个function*的read和writ的方法。
这个时候体现了接口和向上转型的好处。还有静态方法,方便我们调用
如果没有接口,我们需要在function*类里分别写出这两个方法,两个不可怕,如果有一百个呢?你若是忘了少些一个两个的到时候用不着也就算了,万一用到了结果你没有这个功能怎么
如果没有向上转型,我们需要单独生产每个确定的类,比如,调用functionA的read()函数,那么我们就要生产functionA的对象,如果有一百个function*类呢,我们就要生产一百个function*对象,
如果没有Factory,那我们每次使用都需要实现Factory里面的判断,虽然向上转型为我们省了不少代码,但是每次都需要写那个chose()判断函数,如果调用一百次那还不写死,所以我们把它又封装在Factory里面这样就实现了Test里面的那种简单实用的调用了。只需要调用一个Factory对象就行了,不管你以后是在Test类里面调用还是在其他类里面调用,都只需要生产一个Factory对象,Factory就是工厂的意思,这个类的功能也跟工厂一样,需要做什么只需要告诉工厂就行了,工厂帮你实现。
静态函数的作用就不用说了吧,在这多少也能帮我们省两行代码。