设计模式之美—简单工厂模式
程序员文章站
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 我是跑舌头,苦的!
在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。
上一篇: 强烈推荐一款图片无损压缩工具
下一篇: Android 开发凉了吗!