欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-14 17:50:22
简单工厂模式 简单工厂模式分为三种:普通简单工厂、多方法简单工厂、静态方法简单工厂。 普通工厂模式 最近看了老酒馆电视剧,深深被陈怀海他们的情怀所感动,当然里面也有很多的酒,比如扳倒井,闷倒驴,跑舌头,吹破天,二闺女,枕头亲。我们以酒为例: 创建酒的接口: public interface Liqu ......

简单工厂模式

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

普通工厂模式

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

  创建酒的接口:

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

 

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