设计模式之静态代理模式

###代理模式 生活中,我们很多地方要用到代理。比如租房,我们一般不会自己去找房子,而是通过中介帮我们租房子,这样中介就“代理”了我们租房的这个过程。同样的,在程序设计中也会有这样的问题。我们不能直接访问某个对象或方法,而是通过代理对象来访问。这就是代理模式。 ###静态代理 静态代理是我们“知根知底”的一种代理模式,因为其被代理者、代理者都是需要我们自己来实现的。与之相对的动态代理的代理者则不是...
阅读全文

设计模式之单例模式

###单例模式 一个类只能生成唯一一个实例对象的设计模式 为了实现这一目标,需要我们: 1. 将类的构造器私有化,这样就不能被其他方法调用 2. 提供一个获取该类实例变量的方法,该方法必定是公有静态的(因为此时我们还不能获得该类的实例对象,只能通过类名.方法调用) 3. 该类自己创建自己的唯一实例,这个实例是静态私有 ###实现方式 单例模式有三种实现方法: - 懒汉式:顾名思义,在调...
阅读全文

简单模拟Java中的ArrayList

Java中的ArrayList是用数组实现的。 数组是有界的,因此实现最重要的是数组的扩容机制。 扩容机制: > 当要存的数据大于数组大小时,会扩容。 在JDK1.8中,会创建一个新数组,新数组大小为原数组的1.5倍,并将原数组复制到该新数组中。 可以发现,扩容过程会消耗大量的时间、空间,应当尽量避免数组扩容。因此在创建ArrayList时,确定一个合适的初始数组大小是很有必要的。 ---...
阅读全文

设计模式之动态代理

动态代理和静态代理同属于代理模式。所不同的是,在Java中,动态代理的代理者对象是由Jdk给我们提供的。 以上次租房为案例,真实角色和共同接口如下: ```prettyprint // 共同的接口 interface Rent{ abstract void rentHouse(); } // 真实对象 class Person implements Rent{ @Override publ...
阅读全文

设计模式之工厂方法模式

使用工厂模式创建对象时,我们不需要对客户端暴露创建逻辑,只需要通过一个共同的接口(工厂)来创建即可,从而使得代码简洁易懂。 工厂方法模式中有以下几个元素: - 产品:要创建的对象 - 工厂:用于创建产品的媒介 在介绍工厂方法模式之前,先介绍一下简单工厂 简单工厂的实现十分简单: 1. 共同的产品接口 2. 产品类实现产品接口 3. 提供工厂类,用于创建不同的产品 以生产汽...
阅读全文

设计模式之装饰模式

###问题的引出 人们日常生活中所使用的手机是不断迭代的、不断产生新功能的。初代的座机,只能打电话。如今手机经过了发展,又产生了很多功能,如听音乐、看视频等。 将手机当做一个产品类,如果我们要实现这一模型的话,若采用一般继承的方式来构造的话,无疑会产生很多类。如下: ```prettyprint interface ITelephone{ void use(); } class Teleph...
阅读全文

设计模式之适配器模式

###适配器模式的作用 适配器模式使得原来由于接口不兼容而不能一起工作的哪些类可以在一起工作。 ###适配器中的角色: - 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。 - 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换为目标接口 - 待适配对象(Adaptee):需要适配的类或适配者类 ###快速理解运用 举例:使用电脑...
阅读全文