0%

java设计模式(创建型5种)

文章字数:630,阅读全文大约需要2分钟

工厂模式Factory Pattern

  • 意图:定义一个创建对象的接口,让子类界定实例化那个工厂类。创建过程在子类执行。
  • 解决问题:接口的子类实现各不相同,但是需要同一个实例化入口

抽象工厂Abstract Factory Pattern

  • 意图:将同类产品的工厂类组合起来,形成一个抽象工厂接口。
  • 使用步骤:1.通过抽象工厂的实现类获取工厂类(同类工厂在一起) 2.通过工厂类获取对象实体

单例模式Singleton Pattern

  • 意图:保证类只有一个实例,并且提供全局访问点
  • 实现:判断是否存在实例,存在返回。不存在创建,并用静态变量保存。私有化构造函数,使只有一个入口用于生产实例

建造者模式Builder Pattern

  • 意图:将由多个步骤/节点,组成。每个步骤/节点的内容一样,但是需要不同顺序,数量等组合生成新产品。
  • 实现:1.拥有不同细节实现类 2.按规则生成并保存细节(List)3.将细节拼接成为一个新的对象
  • 例子:StringBuilder

原型模式Prototype Pattern

  • 意图:作为创建模式,和工厂模式不同的是该模式的思想是创建一个对象的原型,原型对象可以复制、克隆为新的对象
  • 实现:原型模式有两种实现
  1. 浅复制:使用Cloneable.clone(),原型继承Cloneable,然后调用super.clone()进行类型转换。浅复制基本数据类型的变量会创建,其它的对象引用指向原型对象。

  2. 深复制:基本类型和引用类型都重新创建

原型implements Cloneable, Serializable

克隆方法

1
2
3
4
5
6
7
8
9
10
11
12
public Object deepClone() throws IOException, ClassNotFoundException {

/* 写入当前对象的二进制流 */
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);

/* 读出二进制流产生的新对象 */
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}