9.3接口(二)

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抽象类与接口区别

在这里插入图片描述
抽象类最大缺点:一个子类只能继承一个抽象类,单继承局限。所以当遇到抽象类和接口都可以使用的情况下,优先考虑接口,避免单继承局限。

发布了162 篇原创文章 · 获赞 9 · 访问量 3107

猜你喜欢

转载自blog.csdn.net/ll_j_21/article/details/104536925
9.3