Java代理模式和装饰者模式的区别?
代理模式与装饰者模式看起来很像,都实现基础对象实现的接口,在其自身对象中都保存着对被代理/被装饰者的对象引用。 先来看看装饰者模式的定义:动态的将责任附加到被装饰者对象上,用于扩展对象的功能。比继承的灵活性大。典型的如Java IO的设计即是装饰者模式的典型应用。 代理模式模式的定义:对其他对象进行代理,以控制对被代理对象的访问。Spring的为业务逻辑层方法生成的代理类,主要进行一些事务控制等。 由定义可以看出装饰的责任是扩展功能 ,而代理主要控制访问。 具体例子可参看Java IO装饰/Spring的动态代理/Hibernate的代理等。
java的输入和输出为什么要那么复杂?
Java的IO设计的确很复杂,很多朋友在使用时IO时被各种各样的流弄的晕头转向。
大致情况如下
以Stream结尾的为字节流,以Writer或者Reader结尾的为字符流,
所有的输入流都是抽象类IuputStream(字节输入流)或者抽象类Reader(字符输入流)的子类。
所有的输出流都是抽象类OutputStream(字节输出流)或者抽象类Writer(字符输出流)的子类
之所以IO那么复杂,是为了更好的应对各种场景,比如
BufferedWriter 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。由于继承了FilterInputStream,其可用于包装装饰其他流使它们提高效率,既采用了装饰设计模式。
InputStreamReader和OutputStreamWriter转换流,作为字符和字节的桥梁
对象操作流ObjectInputStream和ObjectOutputStream用于Java 对象的基本数据类型和图形读写。
用于操作数组ByteArrayInputStream,字符串StringWriter等流
区分技巧,下面分享下我找到的一份IO使用技巧总结
IO设计非常复杂不过其目标还是为了能更好的应对各种场景使用更适合的流提高效率。希望我的回答对你有所帮助。
java设计模式推荐哪本书籍?
作为一个 5 年研发经验的 Java 程序员,我读过的关于设计模式的书籍是《修炼Java开发技术:在架构中体验设计模式和算法之美》。
买了这本书之后,闲置了很长时间,而一番愁苦之后,想了既然花了钱,还是看一看的好。就这样,每天下班看个半个小时,坚持了没多久,就那么默默的放弃了,其中的内容不是我这种刚参加工作的渣渣能看的懂得,越看不懂的东西,越强迫自己去看,真心感觉好累。自己痛苦,书也痛苦,还是去看看从入门到放弃的好。
架构中的设计原则:单一职责原则,里式替换原则(LSP),依赖注入原则(DIP),接口分离原则(ISP),迪米特原则(LOD),开闭原则(OCP)。
23个设计模式:工厂模式,建造模式,工厂方法模式,原始模型模式,单例模式,适配器(变压器)模式,桥梁模式,合成模式,装饰模式,门面模式,享元模式,代理模式,责任链模式,命令模式,解释器模式,迭代子模式,备忘录模式,观察者模式,状态模式,策略模式,模板方法模式,访问者模式。
每个模式都会一段辛酸泪,那些不懂时的岁月,看了一遍又一遍,读完文字撸代码,还是不懂,耗死了脑细胞,耗掉了黑发。在参加工作近4年之后,读起来容易多了,每了解到一种设计模式,总会有这样真好真方便之感。具备一定研发经验之后,重新开始再阅读这本书,从头到尾,一边思考,一边阅读,一边做笔记,由于只看过一遍,收获很有限,随后有时间时,我将会重新去阅读。虽然只读过一边,已经可以将策略模式和模板方法模式组合使用,完成 ICON 策略排序的的业务需求,并尝试在其它需求中加以使用。
作者:夕阳雨晴,欢迎关注我的头条号:偶尔美文,主流Java,为你讲述不一样的码农生活。