KEEP ON CODING......

随笔分类 -  Effective Java

《Effective Java》学习笔记,设计模式JAVA版,Java知识点学习及实践记录
摘要:1、简述 Serialization(序列化) 是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。 在分布式环境中,经常需要将Object从这一端网络或设备传递到另一端,这就需要有一种可以在两端传输数据的协议。Java序列化机制就是为了 阅读全文
posted @ 2017-12-29 17:39 Cecil2020 阅读(227) 评论(0) 推荐(0)
摘要:1. 概述 首先,我们来思考如下两个问题: 什么是代理模式?为什么要使用代理模式? 简单总结一下,所谓的代理模式就是在原有的服务上多加一个占位,通过这个占位去控制服务的访问。通过代理模式,一方面可以控制如何访问真正的服务对象,提供额外服务;另一方面,有机会通过重写一些类来满足特定的需要。 在java 阅读全文
posted @ 2017-11-02 19:13 Cecil2020 阅读(215) 评论(0) 推荐(0)
摘要:1. 基本概念: (1)什么是泛型? 泛型,即“参数化类型”。即将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用或调用时传入具体的类型(类型实参)。 (2)为什么要使用泛型? 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过 阅读全文
posted @ 2017-10-16 14:48 Cecil2020 阅读(446) 评论(0) 推荐(0)
摘要:常用的排序方法有:冒泡排序、快速排序、选择排序、插入排序、归并排序,除此之外,还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、希尔排序等,这里着重介绍下前半段列举的几种常见方法的实现。 1. 冒泡排序法: /* * 1.比较相邻元素:如果第一个比第二个大,就交换 * 2.对每一对相邻元素作同样的工作,从 阅读全文
posted @ 2017-03-18 15:17 Cecil2020 阅读(241) 评论(0) 推荐(0)
摘要:1. 简述 在《Java编程思想》P86页有这样一段话: “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。” 因此,如果要在不创建对象 阅读全文
posted @ 2016-09-30 10:41 Cecil2020 阅读(371) 评论(0) 推荐(0)
摘要:1、概述 如果clone方法返回一个由构造器创建的对象,它就得到有错误的类。因此,如果覆盖了非final类中的clone方法,则应该返回一个通过调用super.clone得到的对象。如果类的所有超类都遵循这条规则,那么调用super.clone最终会调用Object的clone方法,从而创建出正确的 阅读全文
posted @ 2016-07-28 20:04 Cecil2020 阅读(879) 评论(0) 推荐(0)
摘要:1、定义: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 2、实例:1)需求: 菜单(煎饼屋菜单、餐厅菜单和咖啡菜单)采用不同的集合存取(ArrayList,String[],Hashtable),使用迭代器模式使服务员(waitress)能够不依赖于具体菜单而实现打印菜单 阅读全文
posted @ 2016-07-23 16:25 Cecil2020 阅读(271) 评论(0) 推荐(0)
摘要:1、定义: 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 (为了防止子类改变模板方法中的算法,可以将模板方法声明为final) 2、钩子(hook)是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要 阅读全文
posted @ 2016-07-23 14:28 Cecil2020 阅读(174) 评论(0) 推荐(0)
摘要:1、定义: 将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象,命令模式也支持可撤销的操作。命令可以用来实现日志和事务系统。 2、实例: 1)需求:设计一个家电遥控器的API,遥控器具有7个可编程的插槽,每个插槽都具有对应的开关按钮,另外还具备撤销按钮,用来撤销上一步的操作。 2 阅读全文
posted @ 2016-07-21 16:29 Cecil2020 阅读(243) 评论(0) 推荐(0)
摘要:1、几种关联模式的联系: 适配器模式:将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。 外观模式:提供了一个统一的接口,用来访问子系统的一群接口,外观定义了一个高层接口,让子系统更容易使用。实现了客户和子系统之间的松耦合 两者区别在于:外观模式的意图是简化接口,而 阅读全文
posted @ 2016-07-21 16:24 Cecil2020 阅读(256) 评论(0) 推荐(0)
摘要:写在前面的话: 该模式动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。装饰者可以在被装饰者的行为前面与/或后面加上自己的行为,甚至将被装饰者的行为整个取代掉,而达到特定的目的。 该模式的实现意味着一群装饰者类,这些类反映出被装饰的组件类型,用来包装具体组件。 缺点在于, 阅读全文
posted @ 2016-07-16 14:39 Cecil2020 阅读(199) 评论(0) 推荐(0)
摘要:观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有的依赖者都会收到通知并自动更新,提供了一种对象设计,让主题和观察者之间松耦合,实现代码如下: 1、主题部分: 定义主题接口: public interface Subject { /*增加观察者*/ public void 阅读全文
posted @ 2016-07-15 14:18 Cecil2020 阅读(161) 评论(0) 推荐(0)
摘要:1、大多数情况下,正常的初始化要优先于延迟初始化。 2、如果利用延迟优化来破坏初始化的循环,就要使用同步访问方法,因为它是最简单、最清楚的替代方法。 3、如果出于性能考虑需要对静态域使用延迟初始化,就使用lazy initialization holder class 模式,保证类要到被用到的时候才 阅读全文
posted @ 2016-06-30 19:16 Cecil2020 阅读(404) 评论(0) 推荐(0)
摘要:如下代码,通常用户列表为空时,会习惯性返回null,因为这时会认为:null返回值比零长度数组更好,因为它避免了分配数组所需要的开销。 但这种观点是站不住脚的,原因如下: 1) 在这个级别上担心性能问题是不明智的,除非分析表明这个方法正是造成性能问题的真正源头;2) 对于不返回任何元素的调用,每次都 阅读全文
posted @ 2016-06-28 19:26 Cecil2020 阅读(506) 评论(0) 推荐(0)
摘要:一、 考虑用静态工厂方法代替构造器: 1)静态工厂方法与构造器不同的第一大优势在于:他们有名称。当一个类需要多个带有相同签名的构造器时,就用静态方法代替构造器,并慎重的选择名称以突出他们间的区别; 2)静态工厂方法第二大优势: 不必在每次调用他们的时候都创建一个新对象; 3)静态工厂方法第三大优势: 阅读全文
posted @ 2016-06-27 19:38 Cecil2020 阅读(454) 评论(0) 推荐(0)
摘要:如下代码: 这个程序不会抛出异常,而是只打印6个重复的词(从"1,1"到"6,6"),而不是预计的36中组合, 为修正这个bug,需要在外部循环的作用域中添加一个变量来保存外部变量,如下: 如果是嵌套的for-each循环,这个问题就完全消失,产生的代码就是希望得到的: for循环不仅可以遍历数组和 阅读全文
posted @ 2016-06-27 19:29 Cecil2020 阅读(195) 评论(0) 推荐(0)
摘要:题目: 假设你口袋里有1$,看到货架上有一排美味的糖果,标价分别为0.10$,0.20$,0.30$...1$,你打算从标价为0.10$的糖果开始买起,每种买一颗,一直到不能支付货架上下一种价格的糖果为止,那么可以买多少颗糖果?还可以找回多少零钱? 使用double的程序如下: 返回结果如下:3 i 阅读全文
posted @ 2016-06-24 17:34 Cecil2020 阅读(202) 评论(0) 推荐(0)
摘要:程序中存在内存泄露: 如果一个栈先增后减,那么在栈中弹出的对象将不会被当做垃圾回收,即使使用栈的程序不再引用这些对象,他们也不会被回收。修复方法很简单:手动清除这些引用即可: 一般而言,只要是类自己管理内存,就应该警惕内存泄露问题。 内存泄露的另外几个常见来源是缓存,监听器及其他回调。 处理方式:1 阅读全文
posted @ 2016-06-07 07:56 Cecil2020 阅读(866) 评论(0) 推荐(0)
摘要:1、引言 工厂模式可以分为类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 这种模式从上到下逐步抽象,并且更具一般性,且通常将简单工厂模式看为工厂方法模式的一种特例,两者归为一类。 2、区别 阅读全文
posted @ 2016-06-06 15:42 Cecil2020 阅读(196) 评论(0) 推荐(0)
摘要:Singleton指仅仅被实例化一次的类,通常用来代表那些本质上唯一的系统组件,实现Singleton有三种方法: 1)公有静态成员是个final域,享有特权的用户可以调用AccessibleObject.setAccessible方法,通过反射机制调用私有构造器。 public class Use 阅读全文
posted @ 2016-06-06 11:48 Cecil2020 阅读(238) 评论(0) 推荐(0)