工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪
一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式结构为:
public abstract class AbstractFacotry { public abstract Fruit productionFruit(); }
public class AppleFactory extends AbstractFacotry{ @Override public Fruit productionFruit() { return new Apple("苹果"); } }
public class OrangeFactory extends AbstractFacotry{ @Override public Fruit productionFruit() { return new Orange("橘子"); } }
public class PearFactory extends AbstractFacotry{ @Override public Fruit productionFruit() { // TODO Auto-generated method stub return new Pear("梨"); } }
public class Apple extends Fruit { public Apple(String name,String colour) { this.name = name; this.colour = colour; } public Apple(String name) { this.name = name; } @Override public void showName() { System.out.println("水果名称为:"+this.name); } @Override public void showColour() { System.out.println("水果名颜色:"+this.colour); } @Override public void setColour(String colour) { this.colour = colour; } }
public class Orange extends Fruit { public Orange(String name, String colour) { this.name = name; this.colour = colour; } public Orange(String name) { this.name = name; } @Override public void showName() { System.out.println("水果名称为:"+this.name); } @Override public void showColour() { System.out.println("水果名颜色:"+this.colour); } @Override public void setColour(String colour) { this.colour = colour; } }
public class Pear extends Fruit { public Pear(String name, String colour) { this.name = name; this.colour = colour; } public Pear(String name) { this.name = name; } @Override public void showName() { System.out.println("水果名称为:"+this.name); } @Override public void showColour() { System.out.println("水果名颜色:"+this.colour); } @Override public void setColour(String colour) { this.colour = colour; } }
public static void main(String[] args) { AbstractFacotry af = new AppleFactory(); Fruit productionFruit = af.productionFruit(); productionFruit.setColour("red"); productionFruit.showName(); productionFruit.showColour(); AbstractFacotry pear = new PearFactory(); Fruit pear1 = pear.productionFruit(); pear1.setColour("yellow"); pear1.showName(); pear1.showColour(); }