zoukankan      html  css  js  c++  java
  • 设计模式之美—简单工厂模式

    简单工厂模式

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

    普通工厂模式

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

      创建酒的接口:

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

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

  • 相关阅读:
    使用Visual Studio 2010来部署Windows应用程序
    如何显示一个非激活窗体
    构建ASP.NET网站十大必备工具(2)
    在Azure中创建一个“Hello World”应用程序
    轻松搞定VS2010 和旧版本服务器一起使用的问题
    Sql注入与转义
    小数型 Float(M,D),decimal(M,D)
    MySQL SQL语句
    作业综合练习配置+自定义函数设置
    作业综合练习初始化工作
  • 原文地址:https://www.cnblogs.com/yeshensi/p/11676371.html
Copyright © 2011-2022 走看看