工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
烤鱼店之工厂模式类图: FactoryFish中的Fish实例化延迟到子类NianYuFactory,JiYuFactory中来实例化。这是工厂方法模式和简单工厂模式的区别。
Fish类代码实现:
public class Fish { String name = "Unknow name";}NianYu类代码实现:
public class NianYu extends Fish{ public NianYu() { // TODO Auto-generated constructor stub name = "鲶鱼"; System.out.PRintln("一条烤"+name); }}JiYu类代码实现:
public class JiYu extends Fish{ public JiYu() { // TODO Auto-generated constructor stub name = "鲫鱼"; System.out.println("一条烤"+name); }}FactoryFish类代码实现:
public abstract class FactoryFish { public abstract Fish createFish(); }NianYuFactory类代码实现:
public class NianYuFactory extends FactoryFish{ @Override public Fish createFish() { // TODO Auto-generated method stub return new NianYu(); }}JiYuFactory类代码实现:
public class JiYuFactory extends FactoryFish{ @Override public Fish createFish() { // TODO Auto-generated method stub return new JiYu(); }}KaoYu类代码实现:
public class KaoYu { FactoryFish factoryFish; public KaoYu(FactoryFish factoryFish){ this.factoryFish =factoryFish; } public void orderFish(){ factoryFish.createFish(); }}FishTest类代码实现:
public class FishTest { public static void main(String[] args){ FactoryFish factoryFish = new JiYuFactory(); KaoYu kaoYu = new KaoYu(factoryFish); kaoYu.orderFish(); FactoryFish factoryFish2 = new NianYuFactory(); KaoYu kaoYu2 = new KaoYu(factoryFish2); kaoYu2.orderFish(); }}运行结果:
一条烤鲫鱼一条烤鲶鱼新闻热点
疑难解答