模式定义
工厂方法模式:又称为静态工厂模式,也叫做虚拟构造器模式和多态工厂模式,他属于类创造模式。在工厂模式中。工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生成具体产品对象。
模式结构
模式分析
工厂模式是简单工厂模式的进一步抽象和推广。在工厂方法模式中,核心的工厂类不再负责所有具体产品的创建,而是将生成具体产品类交给子工厂类完成。工厂类和产品类具有平行的等级结构,往往一一对应。
优点:
(1)用户只需关心产品类对应的工厂类,无需关心具体创建细节。
(2)可以由工厂自主确定创建何种产品对象,而如何创建对象的细节完全封装在内部。
(3)系统加入新产品无需修改工厂及接口,而只要添加一个实体类和一个实体类的工厂即可。
缺点:
(1)在添加新的产品时,会创建新的实体类和工厂类,在一定程度上增加了系统复杂性,在编译和运行带来了额外开销。
(2)会增加系统的类数,在一定程度上增加了系统的复杂度和理解难度
(3)系统扩展困难,不利于系统的扩展和维护。
电视案例
TV接口类
package com.zck.factoryfunction; public interface TV { public void play(); }
HaierTV类
package com.zck.factoryfunction; public class HaierTV implements TV { public void play() { System.out.print("海尔电视正在播放 "); } }
HisenseTV类
package com.zck.factoryfunction; public class HisenseTV implements TV { public void play() { System.out.print("海信电视正在播放 "); } }
factory接口类
package com.zck.factoryfunction; public interface TVFactory { public TV produceTV(); }
HaierTVFaction类
package com.zck.factoryfunction; public class HaierTVFactory implements TVFactory { public TV produceTV() { return new HaierTV(); } }
HisenseTVFActory类
package com.zck.factoryfunction; public class HisenseTVFactory implements TVFactory { public TV produceTV() { return new HisenseTV(); } }
Client类
package com.zck.factoryfunction; public class Client { public static void main(String[] args) { TV tv1,tv2; TVFactory tvFactory1 = new HaierTVFactory() ; TVFactory tvFactory2 = new HisenseTVFactory() ; tv1 = tvFactory1.produceTV(); tv1.play(); tv2 = tvFactory2.produceTV(); tv2.play(); } }
测试结果