工厂接口
public interface IFactory {
public IDatabase createDatabase();
public IEmail createEmail();
}
产品接口
public interface IDatabase {
void InsertUser(User user);
User getUser(String name, int id);
}
public interface IEmail {
public void SendEmail(int address);
}
具体工厂
public class AccessFactory implements IFactory{
@Override
public IDatabase createDatabase() {
return new AccessDatabase();
}
@Override
public IEmail createEmail() {
return new AccessEmail();
}
}
public class SqlserverFactory implements IFactory{
@Override
public IDatabase createDatabase() {
return new SqlserverDatabase();
}
@Override
public IEmail createEmail() {
return new SqlserverEmail();
}
}
具体产品
public class AccessEmail implements IEmail{
@Override
public void SendEmail(int address) {
System.out.println("From Access send to "+address);
}
}
public class AccessDatabase implements IDatabase{
@Override
public void InsertUser(User user){
System.out.println("在Accesss中添加"+user.getName());
}
@Override
public User getUser(String name, int id){
User user = new User(name, id);
System.out.println("从Access中获取"+user.getName());
return user;
}
}
public class SqlserverDatabase implements IDatabase{
@Override
public void InsertUser(User user){
System.out.println("在Sql中添加"+user.getName());
}
@Override
public User getUser(String name, int id){
User user = new User(name, id);
System.out.println("从Sql中获取"+user.getName());
return user;
}
}
public class SqlserverEmail implements IEmail{
@Override
public void SendEmail(int address) {
System.out.println("From Sql send to "+address);
}
}
客户端
public class Main {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
String type_01 = "Sqlserver";
String type_02 = "Access";
Class factory_class = Class.forName(type_01+"Factory");
IFactory factory = (IFactory) factory_class.getDeclaredConstructor().newInstance();
IEmail email = factory.createEmail();
email.SendEmail(123);
User zs = new User("张三", 19);
IDatabase database = factory.createDatabase();
database.InsertUser(zs);
}
}
class User {
private String name;
private int id;
public User(String name, int id) {
this.name = name;
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", id=" + id +
'}';
}
}
参考 : 《大话设计模式》