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

简单工厂模式

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

普通工厂模式

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

创建酒的接口:

public interface Liqueur { public void taste();//酒味
}

创建实现类:

(1)闷倒驴味道

1 public class Mdl implements Liqueur { 2  @Override 3     public void taste() { 4         System.out.println("我是闷倒驴,辣的!"); 5  } 6 }

(2)跑舌头味道(里面的杜先生舌头惹了祸,没了,特意点了这跑舌头)

1 public class Pst implements Liqueur { 2  @Override 3     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 我是跑舌头,苦的!

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

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章