首页 > 代码库 > 简单工厂模式---创建型模式
简单工厂模式---创建型模式
简单工厂模式是类的创建模式,由一个参数(产品的类型)来判断创建对应的产品实例。
下面以登入为例:域名登入 或 密码登入等(有各种登入方式,需要一个抽象类,以供具体登入类实现)
/****************接口类************************/
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("没有找到对应的类型");
}
}
}
简单工厂模式的优点:核心是工厂类,根据参数进行逻辑判断 调用某个具体产品。调用者不需要创建具体类,只需根据参数进行调用(即当系统引入新的登入方式,无需修改调用者,只需要在工厂类中增加 逻辑判断即可)。
缺点:所有逻辑判断全部集中在 工厂类中,如果逻辑复杂 将导致工程类越来越复杂,如果如果工厂类什么时候运行不了,将影响整个系统。
简单工厂模式---创建型模式