最近正在对Java的基础知识进行回顾。唉,大二的时候没有好好听Java课跑去学Python了,现在感觉自己Java基础好差,嘤嘤嘤。
之前一直有疑惑:接口能干什么?
- 接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系
- 通过接口可以指明多个类需要实现的方法,一般用于自定义对象的扩张功能
- 接口主要用来定义规范,解除耦合关系
应用例子:
//接口的应用
public class TestUSB {
public static void main(String[] args) {
Computer com = new Computer();
com.doWork(new Printer());
Flash f = new Flash();
com.doWork(f);
//实现接口的匿名类的对象
USB phone = new USB(){
@Override
public void start() {
System.out.println("手机开始工作");
}
@Override
public void stop() {
System.out.println("手机停止连接");
}
};
com.doWork(phone);
//实现接口的匿名类的对象
com.doWork(new USB(){
@Override
public void start() {
System.out.println("手机开始工作");
}
@Override
public void stop() {
System.out.println("手机停止连接");
}
});
}
}
class Computer{ //利用其多态性,传入的是USB接口类型,多态
public void doWork(USB usb){
usb.start();
System.out.println("。。。此设备开始操作。。。");
usb.stop();
}
}
interface USB{
//USB的尺寸的大小,可以设置为常量
//功能设置为抽象方法
void start();
void stop();
}
//打印机
class Printer implements USB{
public void start(){
System.out.println("打印机开始工作");
}
public void stop(){
System.out.println("打印机停止工作");
}
}
//U盘
class Flash implements USB{
public void start(){
System.out.println("U盘开始工作");
}
public void stop(){
System.out.println("U盘停止工作");
}
}
代理模式:
//接口的应用:代理模式
public class TestProxy {
public static void main(String[] args) {
Object obj = new ProxyObject();
obj.action();
}
}
interface Object{
void action();
}
//代理类
class ProxyObject implements Object{
Object obj;
public ProxyObject(){
System.out.println("代理类创建成功");
obj = new ObjctImpl();
}
public void action(){
System.out.println("代理类开始执行");
obj.action();
System.out.println("代理类执行结束");
}
}
//被代理类
class ObjctImpl implements Object{
@Override
public void action() {
System.out.println("=====被代理类开始执行======");
System.out.println("=====具体的操作======");
System.out.println("=====被代理类执行完毕======");
}
}
工厂设计模式:
//接口的应用:工厂方法的设计模式
public class TestFactoryMethod {
public static void main(String[] args) {
IWorkFactory i = new StudentWorkFactory();
i.getWork().doWork();
IWorkFactory i1 = new TeacherWorkFactory();
i1.getWork().doWork();
}
}
interface IWorkFactory{
Work getWork();
}
class StudentWorkFactory implements IWorkFactory{
@Override
public Work getWork() {
return new StudentWork();
}
}
class TeacherWorkFactory implements IWorkFactory{
@Override
public Work getWork() {
return new TeacherWork();
}
}
interface Work{
void doWork();
}
class StudentWork implements Work{
@Override
public void doWork() {
System.out.println("学生写作业");
}
}
class TeacherWork implements Work{
@Override
public void doWork() {
System.out.println("老师批改作业");
}
}