Computer Model:
package com.ccl.factory;
import java.util.LinkedList;
import java.util.List;
public class Computer {
	private List<CPU> cpus;
	private List<Memory> memorys;
	private int cpuNumber;
	private int memoryNumber;
	public Computer(int cpuNumber, int memoryNumber) {
		cpus = new LinkedList<CPU>();
		memorys = new LinkedList<Memory>();
		this.cpuNumber = cpuNumber;
		this.memoryNumber = memoryNumber;
	}
	public int getCpuNumber() {
		return cpuNumber;
	}
	public List<CPU> getCpus() {
		return cpus;
	}
	public int getMemoryNumber() {
		return memoryNumber;
	}
	public List<Memory> getMemorys() {
		return memorys;
	}
	public void setCpus(List<CPU> cpus) {
		this.cpus = cpus;
	}
	public void setMemorys(List<Memory> memorys) {
		this.memorys = memorys;
	}
	public String toString() {
		return "CPU:" + this.cpus + "\nMemory:" + this.memorys;
	}
}
CPU:
package com.ccl.factory;
public class CPU {
	public CPU() {
		System.out.println("new a CPU.");
	}
	public String toString() {
		return "CPU";
	}
}
 
Memory:
package com.ccl.factory;
public class Memory {
	public Memory() {
		System.out.println("new a memory.");
	}
	public String toString() {
		return "Memory";
	}
}
 
以上都是扯蛋:
入正题:
package com.ccl.factory;
public interface ComputerFactory {
	public void buildCPU();
	public void buildMemory();
	public Computer getComputer();
}
package com.ccl.factory;
import java.util.LinkedList;
import java.util.List;
public class SimpleComputerFactoryImpl implements ComputerFactory {
	private Computer computer;
	public SimpleComputerFactoryImpl() {
		computer = new Computer(1, 2);
	}
	@Override
	public void buildCPU() {
		List<CPU> list = new LinkedList<CPU>();
		for (int i = 0; i < this.computer.getCpuNumber(); i++) {
			list.add(new CPU());
		}
		this.computer.setCpus(list);
	}
	@Override
	public void buildMemory() {
		List<Memory> list = new LinkedList<Memory>();
		for (int i = 0; i < this.computer.getMemoryNumber(); i++) {
			list.add(new Memory());
		}
		this.computer.setMemorys(list);
	}
	@Override
	public Computer getComputer() {
		return this.computer;
	}
}
 
package com.ccl.factory;
import java.util.LinkedList;
import java.util.List;
public class SimpleComputerFactoryImpl implements ComputerFactory {
	private Computer computer;
	public SimpleComputerFactoryImpl() {
		computer = new Computer(1, 2);
	}
	@Override
	public void buildCPU() {
		List<CPU> list = new LinkedList<CPU>();
		for (int i = 0; i < this.computer.getCpuNumber(); i++) {
			list.add(new CPU());
		}
		this.computer.setCpus(list);
	}
	@Override
	public void buildMemory() {
		List<Memory> list = new LinkedList<Memory>();
		for (int i = 0; i < this.computer.getMemoryNumber(); i++) {
			list.add(new Memory());
		}
		this.computer.setMemorys(list);
	}
	@Override
	public Computer getComputer() {
		return this.computer;
	}
}
 
package com.ccl.factory;
import java.util.LinkedList;
import java.util.List;
public class ComplexComputerFactoryImpl implements ComputerFactory {
	private Computer computer;
	public ComplexComputerFactoryImpl() {
		computer = new Computer(3, 6);
	}
	@Override
	public void buildCPU() {
		List<CPU> list = new LinkedList<CPU>();
		for (int i = 0; i < this.computer.getCpuNumber(); i++) {
			list.add(new CPU());
		}
		this.computer.setCpus(list);
	}
	@Override
	public void buildMemory() {
		List<Memory> list = new LinkedList<Memory>();
		for (int i = 0; i < this.computer.getMemoryNumber(); i++) {
			list.add(new Memory());
		}
		this.computer.setMemorys(list);
	}
	@Override
	public Computer getComputer() {
		return this.computer;
	}
}
package com.ccl.factory;
public class ComputerFactoryCompany {
	public ComputerFactoryCompany() {
	}
	public Computer build(ComputerFactory c) {
		c.buildCPU();
		c.buildMemory();
		return c.getComputer();
	}
}
Demo:
package com.ccl.factory;
public class ComputerDemo {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ComputerFactoryCompany company = new ComputerFactoryCompany();
		Computer computer = company.build(new SimpleComputerFactoryImpl());
		System.out.println(computer);
		Computer newcomputer = company.build(new ComplexComputerFactoryImpl());
		System.out.println(newcomputer);
	}
}
 
            
                作者:chengchanglun 发表于2012-4-10 11:51:01 
原文链接