设计模式-创建型模式
1,工厂模式
public interface Persion { public void say(); }
创建实现Persion接口的2个类:
public class Student implements Persion { @Override public void say() { System.out.println("student"); } } public class Teacher implements Persion { @Override public void say() { System.out.println("Teacher"); } }
创建一个工厂类:
public class PersionFactory { public static Persion createStudent(){ return new Student(); } public static Teacher createTeacher(){ return new Teacher(); } }
测试:
结果:
结果:
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
单例模式在多线程会有一个同步问题,不在这里讨论
4,建造者模式(Builder)
建造者模式是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性。看代码:
模拟台式电脑组装:
电脑实体类:
抽象建造者:
继承AbsPCBuilder具体建造者:
具体使用者,负责电脑的组装:
测试:
结果:
与工厂模式的区别:工厂模式关注的是创建单个产品,而建造者模式则关注创建复合对象,多个部分。
使用建造者模式的好处:
1,使用建造者模式可以使客户端不必知道产品内部组成的细节。
2,具体的建造者类之间是相互独立的,对系统的扩展非常有利。
3,由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
使用建造者模式的场合:
1,创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
2,要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时。
4,原型模式(Prototype)
将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。
一个原型类,只需要实现Cloneable接口,覆写clone方法,此处clone方法可以改成任意的名称,因为Cloneable接口是个空接口。
创建一个原型类:
浅复制和深复制:
浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。
上面的复制就是浅复制,下面来看一个深复制的例子:
要实现深复制,需要采用流的形式读入当前对象的二进制输入,再写出二进制数据对应的对象。
参考质料:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html