没有工厂模式
设定一个登陆系统
UserServiceImp.java
public class UserServiceImp {
public boolean login(String username, String pw) {
if(username.equals("abc")&&pw.equals("123")){
return true;
}else{
return false;
}
}
}
Test1.java
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
UserServiceImp userServe = new UserServiceImp();
Scanner scanner = new Scanner(System.in);
System.out.println("Please input username:");
String uname = scanner.nextLine();
System.out.println("Please input user password");
String pw = scanner.nextLine();
boolean rel = userServe.login(uname, pw);
System.out.println(rel==true?"Success!":"Falsed!");
}
}
但是如果UserServiceImp.java没有写好,Test1.java就不可以调用,且修改比较麻烦。
工厂模式
简单工厂模式,分离调用者和实现者:
建立一个interface: UserService.java
public interface UserService {
boolean login(String username, String password);
}
建立一个工厂: UserServiceFactory.java
public class UserServiceFactory {
public static UserService getUserService(){
return new UserServiceImp();
}
}
修改Test.java中的代码:
UserService userServe = UserServiceFactory.getUserService();
这样创建userServe对象的时候,就通过UserService 接口,和UserServiceFactory的getUserService()来间接创建了。
修改被调用的类
若有UserServiceImp2.java, 则只用修改facotry中的代码即可。
即,创建UserServiceimp2.java:
public class UserServiceimp2 implements UserService{
@Override
public boolean login(String username, String password) {
if (username.equals("aaa")&&password.equals("111")) {
return true;
} else {
return false;
}
}
}
修改factory代码:
return new UserServiceimp2();
即可