发表于: 2016-10-28 21:09:29

0 2309


今天完成的事情:学习io流,终于解决了发布问题,在project Facets中设置java版本1.6,web module2.5使用wex-5自带的tomcat发布了,但是使用普通tomcat在本地可以启动,在服务器上无法启动。

收获:

1.

继续学习java io,在浏览java核心技术卷2的第一章后,反而感觉全是疑问,

这次学习java编程思想第18章


1.File类


File类在java中既能代表一个特定文件的名称,也能代表一个目录下的一组文件的名称,如果它指的是一个文件集,

我们就可以对此集合使用list()方法,这个方法会返回一个字符数组也就是这个路径下的目录列表


2.输入和输出


流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象,"流"屏蔽了实际的I/O设备中处理数据的细节,


java类库中的I/O类分成输入和输出两部分,


继承InputStream或Reader的类都含有名为read()的基本方法,用于读取单个字节或者字节数组

继承OutputStream或Writer的类都含有名为write()的基本方法,用于写单个字节或者字节数组


这里涉及到了装饰器设计模式



什么是装饰器设计模式:


1.意图

动态的给一个对象添加一些额外的职责,就增加功能来说,Decorator(装饰)模式相比生成子类更为灵活。

2.别名

包装器

3.动机

有时我们希望给某个对象而不是整个类添加一些功能


4.个人理解,参考菜鸟教程的例子

http://www.runoob.com/design-pattern/decorator-pattern.html

(按照它的步骤来)

我们有很多种不同的形状,圆形、正方形、三角形


我们将这些实体公共的功能提取出来写了一个接口Shape公共方法draw,这样我们想要什么形状只需要继承这个Shape接口就可以了,


当我们想给一些形状增加一个功能,那就是将他们的边框变换一个颜色,这里我们可以修改接口,给这个接口添加一个属性或者方法,

也可以修改实体类,


如果我们不想修改接口和实体类,想要使用别的办法实现


这时就到了使用装饰者模式的时候了,


我们创建一个形状装饰者的抽象类,它实现了Shape接口,


声明一个受保护的形状类型的属性,通过构造方法给这个属性赋值,然后重写Shape接口的draw方法进行装饰


最后创建继承形状装饰者的实体类,通过对draw方法的重写来添加给边框变换颜色的的功能,这样我们即没有修改接口和实体类,

又能够实现为实体类增加功能的需求


5.优缺点


两个主要优点:

1)比静态继承更灵活,与对象的静态继承(多重继承,或者说java里面的实现接口,继承父类)相比,装饰者模式提供了更加灵活的向

对象添加职责的方式。可以用添加和分离的方法,用装饰在运行时刻增加和删除职责。相比之下,继承机制要求为每个添加的职责创建

一个新的子类,同时,为一个特定的类提供多个不同的装饰类,这就使得你可以对一些职责进行混合和匹配。

2)避免在层次结构高层的类有太多的特征,装饰者模式提供了一种"即用即付"的方法来添加职责。它并不试图在一个复杂的可定制的类

中支持所有可预见的特征,相反,你可以定义一个简单的类,并且用装饰类给他逐渐添加功能

。扩展一个复杂类的时候,很可能会暴露于添加的职责无关的细节。


缺点:(现在可能还理解不到)

1)装饰类和他修饰的实体类不一样,装饰类是一个透明的包装,因此,使用装饰类时不应该依赖对象标识

(这个对象标识指的是对象的名字吧?)

2)有许多小对象,采用装饰者模式进行系统设计往往会产生许多看上去类似的小对象,这些对象仅仅在他们相互连接的方式上有所不同,

而不是他们的类或是他们的属性值有所不同


6.实现


1)接口的一致性:装饰对象的接口必须与它所装饰的类的接口是一致的,因此实体类和装饰类要有一个公共的父类

2)省略抽象的装饰类,抽象的装饰类是用来约束子类行为,如果增加的功能很少,那么就可以将抽象装饰类的职责合并到装饰实体类上

3)保持实体类接口的简单性

4)可以将装饰类看成实体类的外壳


关于InputStream类型


InputStream的作用是用来表示那些从不同数据源产生输入的类。这些数据源包括:

1)字节数组     ByteArrayInputStream

2)String对象   StringBufferInputStream

3)文件          FileInputStream

4)管道,工作方式与实际管道相似,即,从一端输入,从另一端输出          PipedInputStream

5)一个由其他种类的流组成的序列,以便我们可以将他们收集合并到一个流内  SequenceInputStream

6)其他数据源,如Internet连接  

每一种数据源都有相应的InputStream子类

FilterInputStream 抽象类,作为装饰器接口,为其他的InputStream类提供有用功能


关于OutputStream类型


OutputStream的作用是用来决定输出所要去往的目标:

1)字节数组(byte[]) ByteArrayOutputStream

2)文件      FileOutputStream

3)管道      PipedOutputStream


FilterOutputStream 抽象类,作为装饰器的接口,其中装饰器为其他OutputStream提供有用功能



返回列表 返回列表
评论

    分享到