设计模式-创建型总结实例(四)

2014-11-24 07:14:46 · 作者: · 浏览: 1
ter() { System.out.println("组装好了一台全新的英雄联盟牌电脑"); return computer; } } //实例产品 class HPComputer implements Computer{ String power; String crate; String display; @Override public String getPower() { return power; } @Override public void setPower(String power) { this.power=power; } @Override public String getCrate() { return crate; } @Override public void setCrate(String crate) { this.crate=crate; } @Override public String getDisplay() { return display; } @Override public void setDisplay(String display) { this.display=display; } } //产品概念 interface Computer{ public String getPower(); public void setPower(String power); public String getCrate(); public void setCrate(String crate); public String getDisplay(); public void setDisplay(String display); } //指导构建者 class Director{ BuilderComputer builderComputer; public Director(BuilderComputer builderComputer){ this.builderComputer=builderComputer; } public void construct() { builderComputer.builderPower(); builderComputer.builderCrate(); builderComputer.builderDisplay(); } }


建造者模式的核心任务就是把组装成一个(多种)复杂的对象产品放到对应的各个部分,然后用一个外壳(指导者)来把整体连接完成构建产品。最后返回一个产品(使得同样的构建过程可以创建不同的产品)

原型模式

用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。


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