OOP-20年秋第十周

Java第十周

  • 有交互功能的button
  • JTextArea的rows和columns是显示值不是最大值
  • 一个方法要接口 就给一个实现接口的类对象
  • 事件和程序是多对多的
  • 事件源getsource()
    1. 一个特殊的匿名内部类在这里插入图片描述
    2. 接口里只有一个方法,其实可以用函数式接口整它,用lamda表达式来做在这里插入图片描述

io

  • stream是流!!!有方向!!人往高处走,水往低处流,而且是顺序的一个一个来读写
    1. 它会不断的发生,你想进行读写操作的时候,正常情况下你是顺序访问内容
  • java所有做io操作的时候基本流程是一样的
    1. 对Console file tcp等做io时用面向对象的设计来统一了
    2. 有四个树的任意组成元素Input output byte character
    3. 举个例子:输入的字节流Inupt byte stream
  • 那么什么是byte和character呢?
    1. 如果联想到Java中一个char是两个字节,猜测bytestream一次读一个字节,character stream读两个字节?(这样是不对的)
    2. “我们学习JAVA”是八个字符,十二个字节,所以不能统一除以二理解~因为中美开花()
    3. 在适用范围上有什么区别呢?
    4. 字节流是everything can use
    5. 字符留是only control 文本
  • reader writer的基类就是inputstream和outputstream
  • inputstream reader是byte stream 到character stream的bridge
  • inputstream是抽象类
    1. 其实可以skip掉一些内容,但是skip之后就回不来惹
    2. 为什么没有readline在inputstream嘞?
    3. 其实很简单,因为没有真正意义上的line这样的概念,可以理解为这个是byte字节类型读进来的 而不是读字符,咱不关心字符的内容,所以看不到换行符类似’/n’这样的内容
    4. 第二,还有一个方面,刚刚提到byte和character的差异导致没有readline,但是reader里面也没有readline。
      如果按照流的本质,变成读一行才结束,这就需要一个缓冲区来保存,但是这样子tooo南了!存不住啊!
      So remember or read whole line is impossible in basic class!
      总而言之 readline isn’t a standard way to sequence read.
  • 四个大基类里面讲一个就行,就能满足全部,所以我们来讲讲input byte stream
    1. 看接下来这个设计模式,就是它让java的io很good

装饰模式

  • 先来举个例子

    1. 在这里插入图片描述
    2. 其实每种运输工具也有类似的能力,而且我们还要排列组合,汽油人力货运陆地;柴油引擎客运水上…等等等等
    3. 这样我们要干得也忒多了!so如何解决呢?
    4. 一个烧汽油的不知道自己是飞的还是游的,这就有主次要特征的区别,主要特征就可以用主类去派生出来在这里插入图片描述
    5. 所以就把粉色部分的次要特征排列组合来满足主要特征的需求
    6. 至此正式提出装饰模式
  • 第一,给所有次要特征派生出一个中间基类继承自主类

    1. 在这里插入图片描述
    2. 首先客运这个子类是运输工具吗?
      当然是的,他是间接子类,他的父类得父类就是运输工具
    3. 次要特征既可以修饰主要也可以修饰次要特征
    4. 综上:装饰模式=动态为一个对象扩展额外的功能+继承关系的一种替代方案+动态的撤销or增加功能
    5. 当然有一些很无意义的方案,就需要我们自己去用逻辑判断
  • 在这里插入图片描述

    1. Decorator是抽象装饰:
    2. Component是抽象构件:
    3. Concrete Component是具体构建:
    4. Concrete Decorator是具体装饰:负责給构建对象贴上附加的责任构建
  • 来个代码例子!

    1. 主类和主要特征在这里插入图片描述
    2. 次要特征的基类
      在这里插入图片描述
    3. 次要特征
      在这里插入图片描述
    4. 运行-嵌套
      在这里插入图片描述
    5. 如果你想要再来一层那就new CVehicle(new BVehicle(new AVehicle()))
  • 回到io

  • 对一个输入输出来说;输入输出到底是输入输出了什么是主要特征也就是媒体流;其次就是我要怎么输入输出也就是过滤流;
    在这里插入图片描述

    1. Inputstream如上图,媒体流=media stream=输入输出的介质;过滤流=filter stream=不涉及输入输出什么但是帮助我们输入输出
    2. 实心的是主要特征,空心的是次要特征
      在这里插入图片描述
    3. 实心的管子不能套,但是空心的管子可以套娃套娃套娃
      在这里插入图片描述
    4. 实心的是最大基类的子类,没办法整活,而空心的管子不管再多!也一定要有一个实心的管子!
  • 再一次回归装饰模式

    1. 装饰模式让变少了,但是让对象变多了,本质上用对象换类!
public class Demo {
	public static void main(String[] args){ //应用
		Person p1 = new High(new Man());
		p1.move();
	}
}

abstract class Person {
	abstract void move();
}

class Man extends Person{
	@Override
	void move() {
		System.out.println("man move");
	}
}

class Decorator extends Person{
	Person p1;
	Decorator(Person p1){
		this.p1 = p1;//这样就能实现decorator的类能够拥有其他Person直接or间接子类的内容
	}
	@Override
	void move() {
		p1.move();//这样就能实现decorator的子类一个个的按照要求使用Move方法
	}
}

class High extends Decorator{
	High(Person p1) {
		super(p1);//调用父类的构造函数
	}
	@Override
	void move() {
		System.out.println("Person is high ");//自己次要装饰的属性
		super.move();//上一级的属性
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值