设计模式之美—简单工厂模式            

简单工厂模式

  简单工厂模式分为三种:普通简单工厂、多方法简单工厂、静态方法简单工厂。

普通工厂模式

  最近看了老酒馆电视剧,深深被陈怀海他们的情怀所感动,当然里面也有很多的酒,比如扳倒井,闷倒驴,跑舌头,吹破天,二闺女,枕头亲。我们以酒为例:

  创建酒的接口:

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 我是跑舌头,苦的!

 

在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。