设计模式之美—简单工厂模式
简单工厂模式简单工厂模式分为三种:普通简单工厂、多方法简单工厂、静态方法简单工厂。
普通工厂模式
最近看了老酒馆电视剧,深深被陈怀海他们的情怀所感动,当然里面也有很多的酒,比如扳倒井,闷倒驴,跑舌头,吹破天,二闺女,枕头亲。我们以酒为例:
创建酒的接口:
public interface Liqueur { public void taste();//酒味}
创建实现类:
(1)闷倒驴味道
1 public class Mdl implements Liqueur {2 @Override3 public void taste() {4 System.out.println("我是闷倒驴,辣的!");5 }6 }
(2)跑舌头味道(里面的杜先生舌头惹了祸,没了,特意点了这跑舌头)
1 public class Pst implements Liqueur {2 @Override3 public void taste() {4 System.out.println("我是跑舌头,苦的!");5 }6 }
建工厂类:
1 public class MakeLiqueurFactory { 2 3 /** 4 * 制造闷倒驴和跑舌头 5 */ 6 public Liqueur make(String type){ 7 if ("mdl".equalsIgnoreCase(type)){ 8 return new Mdl(); 9 }else if ("pst".equalsIgnoreCase(type)){10 return new Pst();11 }else {12 return null;13 }14 }15 }
测试:
1 public class LiqueurTest { 2 3 public static void main(String[] args){ 4 MakeLiqueurFactory factory = new MakeLiqueurFactory(); 5 Liqueur mdl = factory.make("mdl"); 6 mdl.taste(); 7 Liqueur pst = factory.make("pst"); 8 pst.taste(); 9 }10 }
多方法简单工厂
在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。
1 public class MakeLiqueurFactory { 2 3 /** 4 * 制造闷倒驴 5 */ 6 public Liqueur makeMdl(){ 7 return new Mdl(); 8 } 9 10 /**11 * 制造跑舌头12 */13 public Liqueur makePst(){14 return new Pst();15 }16 }
测试:
1 public class LiqueurTest { 2 3 public static void main(String[] args){ 4 MakeLiqueurFactory factory = new MakeLiqueurFactory(); 5 Liqueur mdl = factory.makeMdl(); 6 mdl.taste(); 7 Liqueur pst = factory.makeMdl(); 8 pst.taste(); 9 }10 }
静态方法简单工厂
将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
1 public class MakeLiqueurFactory { 2 3 /** 4 * 制造闷倒驴 5 */ 6 public static Liqueur makeMdl(){ 7 return new Mdl(); 8 } 9 10 /**11 * 制造跑舌头12 */13 public static Liqueur makePst(){14 return new Pst();15 }16 }
测试:
1 public class LiqueurTest {2 3 public static void main(String[] args){4 Liqueur mdl = MakeLiqueurFactory.makeMdl();5 mdl.taste();6 Liqueur pst = MakeLiqueurFactory.makePst();7 pst.taste();8 }9 }
结果都是如下所示:
1 我是闷倒驴,辣的!2 我是跑舌头,苦的!
在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。