【设计模式】抽象工厂模式

抽象工厂方法:抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
一、基本模式的实现
以一个用户类来实现基本的模式

//抽象工厂方法
//用户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);
}

————————————————
版权声明:本文为CSDN博主「Tom_back」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43466783/article/details/105313972

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值