模式定义
简单工厂模式:又称为静态工厂方法模式,属于类的创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例,简单工厂模式单独创建一个工厂类负责创建其他类的实例。被创建的实例具有共同的父类。
模式结构
模式分析
简单工厂模式不属于Gof 23个基本设计模式,但可以作为学习Gof的工厂模式的一个先导。简单工厂模式的要点在于,当你需要什么,只要传入一个正确的参数,就可以获取你想要的实例对象,而无需知道其创建细节。
优点:
(1)工厂类中含有必要的判断逻辑,用户可以免除创建对象的责任,它提供了一个专门的工厂类。
(2)用户无需知道具体的产品类的类名,只需知道产品类对应的参数,减少使用者的记忆量。
(3)在一定程度上,提高系统的灵活性。
缺点:
(1)一旦工厂类无法运行,会导致整个系统瘫痪
(2)会增加系统的类数,在一定程度上增加了系统的复杂度和理解难度
(3)系统扩展困难,产品类型较多时,工厂类的逻辑会更复杂,不利于系统的扩展和维护。
电视案例
TV接口类
package com.zck.simpleFactory; public interface TV { public void play(); }
HaierTV类
package com.zck.simpleFactory; public class HaierTV implements TV { public void play() { System.out.print("海尔电视正在播放 "); } }
HisenseTV类
package com.zck.simpleFactory; public class HisenseTV implements TV { public void play() { System.out.print("海信电视正在播放 "); } }
工厂类
package com.zck.simpleFactory; public class TVFactory { public static TV produceTV(String brand){ if (brand.equalsIgnoreCase("haier")) { return new HaierTV(); } else if (brand.equalsIgnoreCase("hisense")) { return new HisenseTV(); }else{ return null; } } }
测试类
package com.zck.simpleFactory; public class Client { public static void main(String[] args) { TV tv1,tv2; tv1 = TVFactory.produceTV("haier"); tv1.play(); tv2 = TVFactory.produceTV("hisense"); tv2.play(); } }
测试结果