2.5 Java之接口,工厂设计模式与代理模式

接口

这里写图片描述
重点:

  • 接口可理解为彻底的抽象类(只含有常量和抽象方法)
    即属性都是常量,方法都是抽象方法

  • 接口定义功能,被类实现(不是继承,因为单继承,多实现)

  • 类与接口的关系:实现

  • 接口修饰符:public或default

  • 实现接口后就有接口的功能

  • 接口没有构造器,不可以实例化

  • 类的继承使得创建某类对象一定会上溯,从而调用Object构造器(回顾)

  1. 属性修饰符省略了public static final
  2. 方法修饰符省略了public abstract
    这里写图片描述

这里写图片描述
1. Serializable接口定义序列化相关的功能,实现该接口,代表String类型对象可序列化
2. 实现Comparable接口的可以比较两元素大小


这里写图片描述
错误原因:方法权限修饰符为default,要求为public,重写不能降低可见性(见重写章节)


这里写图片描述

  • 接口可多实现,关注接口多实现的写法
  • 实现所有接口的方法,方可实例化,不然为抽象类

这里写图片描述

  • 接口间的继承关系
  • GG类既要实现MM接口(接口的父接口)的方法,也要实现JJ接口的方法

小tips:
这里写图片描述
可以迅速写接口的方法


接口的多态性

背景:Duck类实现了这三个接口
这里写图片描述

测试类
这里写图片描述

  • 接口没有构造器,但可以有接口的声明
  • 子类的对象实体赋给父类引用,父类不仅可以是继承的父类,还可以是子类实现的接口,同样有从小往大的转化过程
  • 关注接口的声明(作为形参)
  • 关注虚拟方法调用

接口总结

  • 接口不需要考虑层次关系
  • 接口定义规范,如Collection(集合接口)
  • 接口解除耦合关系(原先通过子父类获取方法,现在直接实现接口)

接口练习

接口USB

  • 定义标准尺寸(不可更改,接口里的常量)
  • 定义功能(比如连接,退出)
  • 驱动理解为接口的实现类的集合

这里写图片描述
接口实现类
打印机类和U盘类

电脑类
这里写图片描述

  • 传入接口形参
  • 编译时是抽象方法,实际执行具体实现类的方法

实现接口的匿名类对象(重点)

这里写图片描述
这里写图片描述

实现USB的接口未知,称为匿名类
- USB替代匿名类的构造器位置,大括号内书写匿名类实现接口的具体方法
- 下方写法更简略

实现比较对象接口

题目:
这里写图片描述
测试类:
这里写图片描述
父类
这里写图片描述
子类
这里写图片描述

  • 写法类比equals方法
  • 当传入非同类对象时,抛出异常

面向接口的编程思想

这里写图片描述

  • Java应用程序要连接数据库,进行增删改查
  • JDBC:一类标准,大部分是接口(要实现的功能定义为接口),Sun公司提供
  • 不同数据库厂商提供不同驱动(XXXX Driver),驱动即实现接口的具体类的集合
  • 解决了适配性的问题,Java应用程序只需要面向JDBC编程即可

工厂设计模式

基本结构

这里写图片描述

  • 上图IWorkFactory接口的功能是返回work对象,但不造是哪个具体work对象,仅保留功能(不创建Work对象)
    从而定义getWork方法,由work的“子类”(work接口的具体实现类)决定创建的具体work对象
  • 一句话就是:IWorkFactory接口创建对象的过程延迟到子类(特殊的子类)来完成

接口IWorkFactory

这里写图片描述


接口Work

这里写图片描述

  • 上图IWorkFactory接口实现类是返回下图Work接口的实现类的
    (如学生工厂类返回学生类)
  • IWorkFactory接口没有决定返回哪个对象,由具体实现类来决定返回的对象,只不过那个对象是由Work接口来继承(特殊的继承)到的(有点乱)

测试类

这里写图片描述

  • 编译期看就是接口间在操作
  • 具体运行时是实现类在进行

    总结

    • 本质是创建对象的时机问题
    • 工厂模式中,接口先定义功能,真正需要使用时
      由子类决定创建时机以及创建谁的对象

代理模式

这里写图片描述
接口名字特别,表示代理的是对象
左边为代理类,右边为被代理类
调用代理类方法,希望真正执行被代理类的方法


被代理类

这里写图片描述


代理类

这里写图片描述

  • 定义接口类型的变量(Object object)
  • 在代理类构造器中将属性(被代理类)实例化

测试类

这里写图片描述
调用方法之前,创建代理类对象时,属性(即被代理类)初始化


总结

  • 上方为静态代理模式(代理类和接口一一对应,不同接口要创建不同的代理类)

  • 后续学习基于反射的动态代理模式:一个代理类实现所有被代理类功能,需要
    动态创建代理类对象

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值