抽象工厂方法:抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
一、基本模式的实现
以一个用户类来实现基本的模式
//抽象工厂方法
//用户bean
class User{
private int 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;
}
private String name;
}
//sql功能实现类
class SqlserverUser{
public void insert(User user) {
System.out.println("sql server中给user表增加一条记录");
}
public User getUser(int id) {
System.out.println("在user表中获取一条记录");
return null;
}
}
//客户端实现
public class cx {
public static void main(String[] args) {
// TODO Auto-generated method stub
//客户端实现,
User user=new User();
SqlserverUser su=new SqlserverUser();//这里直接将所使用的数据库框死,无法进行数据库的转换
su.insert(user);
su.getUser(1);
//工厂方法的客户端实现
User u=new User();
IFactory factory=new SQlserverFactory();
IUser iu=factory.CreatUser();
iu.insert(u);
iu.getUser(1);
}
二、工厂方法实现(超级工厂,附属工厂)
//超级工厂,工厂方法访问数据库
interface IUser{
void insert(User user);
User getUser(int id);
}
//访问 sql server数据库的user表
class SqlServer implements IUser{
@Override
public void insert(User user) {
// TODO Auto-generated method stub
System.out.println("sql server中给user表增加一条记录");
}
@Override
public User getUser(int id) {
// TODO Auto-generated method stub
System.out.println("在user表中获取一条记录");
return null;
}
}
//访问access的表
class AccessUser implements IUser{
@Override
public void insert(User user) {
// TODO Auto-generated method stub
System.out.println("access中给user表增加一条记录");
}
@Override
public User getUser(int id) {
// TODO Auto-generated method stub
System.out.println("在access的user表中获取一条记录");
return null;
}
}
//附属工厂类
interface IFactory{
IUser CreatUser();
}
//sql server 的工厂化
class SQlserverFactory implements IFactory{
@Override
public IUser CreatUser() {
// TODO Auto-generated method stub
return new SqlServer();
}
}
//access的工厂化
class AccessFactory implements IFactory {
@Override
public IUser CreatUser() {
// TODO Auto-generated method stub
return new AccessUser();
}
}
public class cx {
public static void main(String[] args) {
// TODO Auto-generated method stub
//工厂方法的客户端实现
User u=new User();
IFactory factory=new SQlserverFactory();//可以更改数据库进行实例化,如改成access数据库支持new AccessFactory().
IUser iu=factory.CreatUser();
iu.insert(u);
iu.getUser(1);
}