建造者模式的核心任务就是把组装成一个(多种)复杂的对象产品放到对应的各个部分,然后用一个外壳(指导者)来把整体连接完成构建产品。最后返回一个产品(使得同样的构建过程可以创建不同的产品)
原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。
package com.ruishenh.designPatter.creational.prototype;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Prototype {
public static void main(String[] args) throws CloneNotSupportedException {
ConcretePrototype cp = new ConcretePrototype();
cp.setName("test-1");
List list = new ArrayList();
list.add(1);
cp.setList(list);
Map
map = new HashMap
(); map.put("test-2", "test-2-value"); cp.setMaps(map); ConcretePrototype cp2 = new ConcretePrototype(); cp2.setName("test-3"); cp.setConcretePrototype(cp2); ConcretePrototype clonecp = (ConcretePrototype) cp.clone(); clonecp.setName("test-1-1"); Map
maps = clonecp.getMaps(); maps.put("test-2", "test-2-value-2"); ConcretePrototype cp4 = clonecp.getConcretePrototype(); cp4.setName("test-3-3"); List l=clonecp.getList(); l.clear(); //确认基本类型不在是一个引用 System.out.println(cp.getName() + "<==>" + clonecp.getName()); //确认map不在是一个引用 System.out.println(cp.getMaps() + "<==>" + clonecp.getMaps()); //确认getConcretePrototype不在是一个引用 System.out.println(cp.getConcretePrototype().getName() + "<==>" + clonecp.getConcretePrototype().getName()); //确认list不在是一个引用 System.out.println("test-6-" + cp.getList() + "<==>" + "test-6-"+ clonecp.getList()); } } class BasePrototype implements Cloneable { @Override protected BasePrototype clone() throws CloneNotSupportedException { return (BasePrototype) super.clone(); } } class ConcretePrototype extends BasePrototype { private String name; private List list; private Map
maps; private ConcretePrototype concretePrototype; public ConcretePrototype getConcretePrototype() { return concretePrototype; } public void setConcretePrototype(ConcretePrototype concretePrototype) { this.concretePrototype = concretePrototype; } public List getList() { return list; } public Map
getMaps() { return maps; } public void setMaps(Map
maps) { this.maps = maps; } public void setList(List list) { this.list = list; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return supe