简单工厂模式又叫做静态工厂方法模式。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
public interface Product { public void dowork(); } public class Product_A implements Product{ @Override public void dowork() { // TODO Auto-generated method stub System.out.println(this.getClass().getSimpleName()); } } public class Product_B implements Product{ @Override public void dowork() { // TODO Auto-generated method stub System.out.println(this.getClass().getSimpleName()); } } public class Test1 { public static void main(String[] args) { // TODO Auto-generated method stub Test1 t = new Test1(); t.createProduct(0).dowork(); t.createProduct(1).dowork(); } private Product createProduct(int flag){ Product product=null; switch (flag) { case 0: product = new Product_A(); break; case 1: product = new Product_B(); break; default: break; } return product; } }工厂方法模式是简单工厂方法模式的衍生,它的核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,使得系统可以在不修改具体工厂角色的情况下引用新的产品。 在这个模式中,一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品。
实例: //抽象工厂 public interface Creator{ public Light factory(); } //抽象产品 public interface Light{ public void TurnOn(); public void TrunOff(); } //具体产品 public class BullbLight implements Light{ public void TurnOn(){ }
public void TrunOff(){ } } //具体产品 public class TubeLight implements Light{ public void TurnOn(){ } public void TrunOff(){ } } //具体工厂 public class BullbCreator implements Creator{ public Light factory(){ return new BullbLight(); } } //具体工厂 public class TubeCreator implements Creator{ public Light factory(){ return new TubeLight(); } } public class Client{ public static void main(String[] args){ Creator create = new BullbCreator(); Light bullbLight = create.factory(); bullbLight.TurnOn(); Creator create1 = new TubeCreator(); Light tubebLight = create.factory(); tubebLight.TurnOn(); } }抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。
代码: //抽象工厂类 public abstract class AbstractFactory { public abstract Vehicle createVehicle(); public abstract Weapon createWeapon(); public abstract Food createFood(); } //具体工厂类,其中Food,Vehicle,Weapon是抽象类, public class DefaultFactory extends AbstractFactory{ @Override public Food createFood() { return new Apple(); } @Override public Vehicle createVehicle() { return new Car(); } @Override public Weapon createWeapon() { return new AK47(); } } //测试类 public class Test { public static void main(String[] args) { AbstractFactory f = new DefaultFactory(); Vehicle v = f.createVehicle(); v.run(); Weapon w = f.createWeapon(); w.shoot(); Food a = f.createFood(); a.printName(); } }