作用:创建同一种类的对象。
优点:解耦。
1:简单工程模式
package com.factory.simple;
/**
* 抽象类,表示鸟这一类别。
* @author zhaoyu
*
*/
public abstract class Bird {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void fly();
}
package com.factory.simple;
public class DaYan extends Bird{
@Override
public void fly() {
System.out.println("找虫子");
}
}
package com.factory.simple;
public class LaoYing extends Bird{
@Override
public void fly() {
System.out.println("找老鼠");
}
}
package com.factory.simple;
/**
* 工厂
* @author zhaoyu
*
*/
public class BirdFactory {
private static Bird bird;
public static Bird getBird(String type) {
bird = null;
if(type.equals("大雁")) {
bird = new DaYan();
bird.setName("大雁");
}else if(type.equals("老鹰")) {
bird = new LaoYing();
bird.setName("老鹰");
}
return bird;
}
}
2:工厂方法模式
package com.factory.factorymethod;
public abstract class Bird {
private String name;
public abstract void eat();
}
package com.factory.factorymethod;
public class DaYan extends Bird{
@Override
public void eat() {
System.out.println("吃虫子!");
}
}
package com.factory.factorymethod;
public class LaoYing extends Bird{
@Override
public void eat() {
System.out.println("吃老鼠!");
}
}
package com.factory.factorymethod;
public interface BirdFactory {
Bird getBird();
}
package com.factory.factorymethod;
public class DaYanFactory implements BirdFactory{
@Override
public Bird getBird() {
return new DaYan();
}
}
package com.factory.factorymethod;
public class LaoYingFactory implements BirdFactory{
@Override
public Bird getBird() {
return new LaoYing();
}
}
3:抽象工厂模式
用于创建同一系列的产品。
package com.factory.adsfactory;
public interface Cpu {
public void calculate();
}
package com.factory.adsfactory;
public interface Mainboard {
public void installCPU();
}
package com.factory.adsfactory;
public class IntelCpu implements Cpu{
private int pins ;
public IntelCpu(int pins) {
this.pins = pins;
}
@Override
public void calculate() {
System.out.println("Intel CPU针脚数:" + pins);
}
}
package com.factory.adsfactory;
public class IntelMainboard implements Mainboard{
private int cpuHoles;
public IntelMainboard(int cpuHoles) {
this.cpuHoles = cpuHoles;
}
@Override
public void installCPU() {
System.out.println("Intel主板的CPU插槽孔数是:" + cpuHoles);
}
}
package com.factory.adsfactory;
public class AMDCpu implements Cpu{
private int pins ;
public AMDCpu(int pins) {
this.pins = pins;
}
@Override
public void calculate() {
System.out.println("AMD CPU针脚数:" + pins);
}
}
package com.factory.adsfactory;
public class AMDMainboard implements Mainboard{
private int cpuHoles;
public AMDMainboard(int cpuHoles) {
this.cpuHoles = cpuHoles;
}
@Override
public void installCPU() {
System.out.println("AMD主板的CPU插槽孔数是:" + cpuHoles);
}
}
package com.factory.adsfactory;
public interface AbstractFactory {
public Cpu createCpu();
public Mainboard createMainboard();
}
package com.factory.adsfactory;
public class IntelFactory implements AbstractFactory {
@Override
public Cpu createCpu() {
return new IntelCpu(755);
}
@Override
public Mainboard createMainboard() {
return new IntelMainboard(755);
}
}
package com.factory.adsfactory;
public class AmdFactory implements AbstractFactory{
@Override
public Cpu createCpu() {
return new AMDCpu(855);
}
@Override
public Mainboard createMainboard() {
return new AMDMainboard(855);
}
}
package com.factory.adsfactory;
public class ComputerEngineer {
private Cpu cpu;
private Mainboard mainboard;
public void makeComputer(AbstractFactory af) {
prepareHardwares(af);
}
private void prepareHardwares(AbstractFactory af){
this.cpu = af.createCpu();
this.mainboard = af.createMainboard();
//测试配件是否好用
this.cpu.calculate();
this.mainboard.installCPU();
}
}
package com.factory.test;
import com.factory.adsfactory.AbstractFactory;
import com.factory.adsfactory.ComputerEngineer;
import com.factory.adsfactory.IntelFactory;
public class Test {
public static void main(String[] args) {
//创建装机工程师对象
ComputerEngineer cf = new ComputerEngineer();
//客户选择并创建需要使用的产品对象
AbstractFactory af = new IntelFactory();
//告诉装机工程师自己选择的产品,让装机工程师组装电脑
cf.makeComputer(af);
}
}