• 简单工厂模式(静态工厂方法模式)【设计模式】


    定义:提供一个创建实例的功能,客户端使用者无需关心实例的具体实现。被创建实例可以是接口、抽象类,也可以是具体的类。它又称为静态工厂方法(Static Factory Method)模式

     
    简单工厂模式的作用,优点:为客户端屏蔽所需要的实例的具体实现,客户端只需关注某个接口便可,无需关注实现。具体实现被封装起来客户端和具体实现解耦,客户端只需关注接口,接口的实现变化对客户端没有影响。总结起来,就是封装功能,封转实例的具体实现;解耦功能,接口实现的变化影响不了客户端。
     
     
    例子:
     
    例子1:不带参数
    没有参数传给工厂方法,工厂方法只返回一种类型的实现,不使用参数选择实现。
    public class DbConnection 
       private static final int MAX_CONNS = 100;
       private static int totalConnections = 0;
     
       private static Set<DbConnection> availableConnections = new HashSet<DbConnection>();
     
       private DbConnection() 
       { 
         // ... 
         totalConnections++;
       } 
     
       public static DbConnection getDbConnection() 
       { 
         if(totalConnections < MAX_CONNS)
         { 
           return new DbConnection(); 
         } 
     
         else if(availableConnections.size() > 0)
         { 
             DbConnection dbc = availableConnections.iterator().next();
             availableConnections.remove(dbc);
             return dbc;
         } 
         else { 
           throw new NoDbConnections(); 
         } 
       } 
     
       public static void returnDbConnection(DbConnection dbc)
       { 
         availableConnections.add(dbc);
         //... 
       } 
     
     
         例子2:带参数,选择具体实现
         简单工厂方法有传入参数,使用传入参数来确定实现。这种方式,暴露了一定的内部实现细节,因为客户端,要理解参数的含义,才可以正确使用简单工厂方法。而参数的含义,是跟具体实现有关系的,用参数来选择某个具体实现。
         
    public interface Api {
     
      public void testOne();
     
    }
     
    public class ImplApi implements Api{
     
      public void testOne()
      {
        System. out.println( "This is ImplApi." );
      }
     
    }
     
    public class ImplTwoApi implements Api {
     
      public void testOne()
      {
        System. out.println( "This is ImplTwoApi." );
      }
     
    }
     
    public class TypeConstants {
     
      public static final int TypeOne =1;
      public static final int TypeTwo =2;
     
     
    }
     
    public class ApiFactory {
     
     
      /**
       * @param type  the value  must in TypeConstants
       * @throws Exception
       *
       */
      public static Api createApi( int type) throws Exception
     {
      
      
          switch(type)
          {
            case TypeConstants. TypeOne:
              return new ImplApi();
             
             
            case TypeConstants. TypeTwo:
              return new ImplTwoApi();
             
             default :
               throw new Exception( "Unsupoorted param exception");
          }
     }
     
    }
     
     
    客户端,需要理解传入参数的含义,这在一定程度上暴露了工厂方法的内部实现。
    public class Client {
     
     
      public static void main(String[] args)
      {
        try {
          Api one = ApiFactory. createApi(TypeConstants. TypeOne);
          one.testOne();
        } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
       
       
      }
     
    }
     
         例子3:需要传入参数,具体实现是通过读取配置文件或者依赖注入来实现,也就是说,实现方式的职责委托到其它部件。 这样可以避免,不断往工厂方法中添加实现代码。
     
    引用资料:
    http://stackoverflow.com/questions/929021/what-are-static-factory-methods-in-java
     
  • 相关阅读:
    datagrid
    SQL语句
    JavaScript事件
    DOM和BOM
    JavaScript基础知识
    css
    网络编程常识
    集合框架
    多线程常识
    面向对象常识
  • 原文地址:https://www.cnblogs.com/ttylinux/p/4575703.html
Copyright © 2020-2023  润新知