设计模式——抽象工厂模式实现

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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值