首页 > 代码库 > 简单工厂模式---创建型模式

简单工厂模式---创建型模式

  简单工厂模式是类的创建模式,由一个参数(产品的类型)来判断创建对应的产品实例。

     下面以登入为例:域名登入 或 密码登入等(有各种登入方式,需要一个抽象类,以供具体登入类实现)

      /****************接口类************************/

     package simpleFactoryType;

     /**
     * 登入接口,以供各种登入方式实现接口
     * (在工厂模式中,实现该登入接口的相当于各种对应产品)
     * @author dxx
     *
    */
   public interface LoginInteface {
    /**
     *
     * @param name  用户名
     * @param password 密码
     * @return 正确返回true,否则返回false
     */
     public boolean  verifyLogin(String name,String password);

  }

    /*****************登入实现类****************************/

   package simpleFactoryType;

/**
 * 域名登入
 * @author dxx
 *
 */
public class DomainLogin  implements LoginInteface{
    
    /**
     * 域名登入验证
     */
    public boolean verifyLogin(String name, String password) {
        System.out.println("执行域名登入的验证,执行相关中间操作");
        return true;
    }

}

 

  /*******************具体登入实现类**************************/

    /package simpleFactoryType;

/**
 * 通过密码的登入验证
 * @author dxx
 *
 */
public class PasswordLogin implements LoginInteface {
    
    /**
     * 通过密码等验证进行登入
     */
    public boolean verifyLogin(String name, String password) {
        System.out.println("密码登入验证中间操作");
        return true;
    }

}

/**********************简单工厂类(根据参数指定调用生产哪个登入接口)****************************/

package simpleFactoryType;

import java.util.Objects;


/**
 * 工厂类,用以实现各种产品(登入方式选择)
 * @author dxx
 *
 */
public class FactoryManager {
    
    /**
     * 简单工厂模式 需要通过这个type 来判断调用哪种 产品(登入方式的接口)
     * @param type  
     * @return
     */
    public static LoginInteface getProductFactory(String type){
        if(Objects.equals("domain", type)){
            return new DomainLogin();
        }else if(Objects.equals("password", type)){
            return new PasswordLogin();
        }else{
            /**
             * 如果没有匹配的类型则抛出异常
             */
            throw new RuntimeException("没有找到对应的类型");
        }
    }

}

 

简单工厂模式的优点:核心是工厂类,根据参数进行逻辑判断 调用某个具体产品。调用者不需要创建具体类,只需根据参数进行调用(即当系统引入新的登入方式,无需修改调用者,只需要在工厂类中增加 逻辑判断即可)。

缺点:所有逻辑判断全部集中在 工厂类中,如果逻辑复杂 将导致工程类越来越复杂,如果如果工厂类什么时候运行不了,将影响整个系统。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

     

简单工厂模式---创建型模式