9.3.3定义接口标准
例如USB接口,计算机上可以插入各种Usb接口,但是计算机上认识的只是USB标准。
范例:利用接口定义标准
public interface IUSB {
public boolean check(); //检查可以通过工作
public void work(); //设备工作
}
public class Keyboard implements IUSB {
@Override
public boolean check() {
return false;
}
@Override
public void work() {
System.out.println("请在键盘输入520");
}
}
public class Print implements IUSB {
@Override
public boolean check() {
return true;
}
@Override
public void work() {
System.out.println("双击两下查看爱情");
}
}
public class Computer { //定义计算机类
public void show(IUSB usb) { //计算机上使用USB标准
if(usb.check()) { //检查设备
usb.work(); //开始工作
}
else { //检查失败
System.out.println("出现故障,请您检查后使用");
}
}
}
public class Java207 {
public static void main(String[] args) {
Computer oper=new Computer();
oper.show(new Keyboard()); //插入键盘设备
oper.show(new Print()); //插入鼠标设备
}
}
执行结果
出现故障,请您检查后使用
双击两下查看爱情
9.3.4工厂设计模式
接口在实际开发过程中主要特点是进行标准的定义,解决代码耦合问题;
范例:工厂模式实现
在这里插入代码片
public interface IFood { //定义食物标准
public void eat(); //食物的核心功能:吃
}
public class Fruit implements IFood {
@Override
public void eat() {
System.out.println("吃水果"); //覆写抽象方法
}
}
public class Egg implements IFood {
@Override
public void eat() {
System.out.println("吃鸡蛋"); //覆写抽象方法
}
}
public class Factory {
public static IFood getInfo(String name) {
if("fruit".equals(name)) {
return new Fruit();
}
else if("egg".equals(name)) {
return new Egg();
}
else {
return null;
}
}
}
public class Java209 {
public static void main(String[] args) {
IFood food=Factory.getInfo("fruit");
food.eat();
IFood food1=Factory.getInfo("egg");
food1.eat();
}
}
执行结果
吃水果
吃鸡蛋
主类(客户端)调用时不再需要关注具体的IFood接口子类,只需要传入指定的类型标记就可以获取接口对象。
9.3.5代理设计模式
范例:代理设计
package com.lxh.ninechapter;
public interface IEat { //核心业务类
public void get(); //核心业务方法
}
public class Eatx implements IEat {
private IEat eat; //核心业务实例
public Eatx(IEat eat) { //设置代理项
this.eat = eat;
}
public IEat getEat() {
return eat;
}
public void setEat(IEat eat) {
this.eat = eat;
}
@Override
public void get() { //代理实现方法
this.perper();
this.eat.get();
this.clear();
}
public void perper() {
System.out.println("准备食材");
System.out.println("准备烹饪");
}
public void clear() {
System.out.println("收拾碗筷");
}
}
public class Eatz implements IEat {
@Override
public void get() {
System.out.println("送来一道菜,开吃");
}
}
public class Java211 {
public static void main(String[] args) {
IEat ea=new Eatx(new Eatz());
ea.get();
}
}
执行结果
准备食材
准备烹饪
送来一道菜,开吃
收拾碗筷
9.3.6抽象类与接口区别
抽象类最大缺点:一个子类只能继承一个抽象类,单继承局限。所以当遇到抽象类和接口都可以使用的情况下,优先考虑接口,避免单继承局限。