设计模式之简单工厂模式

  学习完简单工厂模式,模仿写了个demo,加深记忆。原博地址:https://www.cnblogs.com/java-my-life/

public class DemoWithoutModel {
    public static void main(String[] args) {
        String loginType = "password";
        String username = "admin";
        String password = "123456";
        if ("domain".equals(loginType)) {
            DomainLogin login = new DomainLogin();
            boolean bool = login.login(username, password);
            if (bool) {
                // 业务
            } else {
                // 业务
            }
        } else if ("password".equals(loginType)) {
            PasswordLogin login = new PasswordLogin();
            boolean bool = login.login(username, password);
            if (bool) {
                // 业务
            } else {
                // 业务
            }
        } else {
            throw new RuntimeException("no such login type");
        }
    }
}

相信只要有些经验的老哥们,都写过不少这样的代码,心里感觉别扭,又不知道如何改进。简单工厂模式帮助您。

定义接口:

public interface Login {
	boolean login(String username, String password);
}

两个实现类:

public class DomainLogin implements Login {
	@Override
	public boolean login(String username, String password) {
		System.out.println("domain login");
		return true;
	}
}

  

public class PasswordLogin implements Login {
	@Override
	public boolean login(String username, String password) {
		System.out.println("password login");
		return true;
	}
}

工厂类:

public class LoginManager {
	public static Login factory(String loginType) {
		if ("domain".equals(loginType)) {
			return new DomainLogin();
		} else if ("password".equals(loginType)) {
			return new PasswordLogin();
		} else {
			throw new RuntimeException("no such login type");
		}
	}
}

测试类:

public class Demo {
	public static void main(String[] args) {
		// simple factory method
		String loginType = "password";
		String username = "admin";
		String password = "123456";
		Login login = LoginManager.factory(loginType);
		boolean bool = login.login(username, password);
		if (bool) {
			// 业务
		} else {
			// 业务
		}
	}
}
原文地址:https://www.cnblogs.com/hungryforknowedge/p/10032043.html