java3种工厂模式–(简单工厂、工厂方法、抽象工厂)
1. 简单工厂模式(静态工厂)
代码:
/**
* 简单工厂模式----登录(产品)的接口(或抽象类)
*/
public interface Login {
/**
* 登录验证
* @param loginRequest
* @return
*/
Boolean login(LoginRequest loginRequest);
}
/**
* 简单工厂模式----具体登录(产品)的类1(实现产品的接口或继承产品的抽象类))
*/
public class LocalAuthentication implements Login{
@Override
public Boolean login(LoginRequest loginRequest) {
System.out.println("登录1");
}
}
/**
* 简单工厂模式----具体登录(产品)的类2(实现产品的接口或继承产品的抽象类))
*/
public class DynamicTokenAuthentication implements Login{
@Override
public Boolean login(LoginRequest loginRequest) {
System.out.println("登录1");
}
}
/**
* 简单工厂模式----工厂生产产品
*/
public class LoginStrategyFactory {
private final static Map<String,Login> LOGIN_STRATEGY_MAP = new HashMap<>();
public static final String DEFAULT_KEY = LoginTypeKey.LOCAL;
static{
LOGIN_STRATEGY_MAP.put(LoginTypeKey.LOCAL,new LocalAuthentication());
LOGIN_STRATEGY_MAP.put(LoginTypeKey.DYNAMICTOKEN,new DynamicTokenAuthentication());
}
private interface LoginTypeKey{
String LOCAL = "LOCAL";
String DYNAMICTOKEN = "DYNAMICTOKEN";
}
public static Login getLoginStance(String key) {
if (LOGIN_STRATEGY_MAP.containsKey(key)){
return LOGIN_STRATEGY_MAP.get(key);
}
return LOGIN_STRATEGY_MAP.get(DEFAULT_KEY);
}
}
/**
* 简单工厂模式----具体使用
*/
public class LoginMain{
public Boolean toLogin(UserRequest userRequest){
//获取登录类型
String type = userRequest.getType();
Login Ilgoin = LoginStrategyFactory.getLoginStance(type);
return Ilgoin.login(userRequest);
}
}