Java--设计模式之抽象工厂模式

抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。我们以不同的数据库插入一条用户记录和部门为例子来看看抽象工厂模式的应用。

1、用户模型类和部门模型类

public class User {
	private String _id;
	private String _name;
	public String get_id() {
		return _id;
	}
	public void set_id(String _id) {
		this._id = _id;
	}
	public String get_name() {
		return _name;
	}
	public void set_name(String _name) {
		this._name = _name;
	}
	
}
public class Department {
	private String _id;
	private String _name;
	public String get_id() {
		return _id;
	}
	public void set_id(String _id) {
		this._id = _id;
	}
	public String get_name() {
		return _name;
	}
	public void set_name(String _name) {
		this._name = _name;
	}
	
}


2、定义用户操作接口和部门操作接口,包括插入和根据ID获得一条记录
public interface IUser {
	public void insert(User user);
	public User getUser(int id);
}
public interface IDepartment {
	public void insert(Department department);
	public Department getDepartment(int id);
}

3、分别用sqlserver数据库和access数据库实现用户操作接口和部门接口
public class AccessUser implements IUser{

	@Override
	public void insert(User user) {
		System.out.println("access 插入一条用户记录");
	}

	@Override
	public User getUser(int id) {
		System.out.println("access 根据Id获得一条用户记录");
		return null;
	}

}
public class SqlServerUser implements IUser{

	@Override
	public void insert(User user) {
		System.out.println("sql server 插入一条用户记录");
	}

	@Override
	public User getUser(int id) {
		System.out.println("sql server 根据Id获得一条用户记录");
		return null;
	}

}
public class AccessDepartment implements IDepartment{

	@Override
	public void insert(Department department) {
		System.out.println("access中插入一条部门数据");
	}

	@Override
	public Department getDepartment(int id) {
		System.out.println("access中根据id获得一条部门记录");
		return null;
	}

}
public class SqlServerDepartment implements IDepartment{

	@Override
	public void insert(Department department) {
		System.out.println("sql server中插入一条部门数据");
	}

	@Override
	public Department getDepartment(int id) {
		System.out.println("sql server中根据id获得一条部门记录");
		return null;
	}

}
4、定义一个访问User表和部门表对象的抽象的工厂接口
public interface IFactory {
	IUser createUser();
	IDepartment createDepartment();
}
5、实现IFactory接口,实例化SqlserverUser、SqlServerDepartment、AccessUser以及AccessDepartment
public class AccessFactory implements IFactory{

	@Override
	public IUser createUser() {
		return new AccessUser();
	}

	@Override
	public IDepartment createDepartment() {
		return new AccessDepartment();
	}

}

public class SqlServerFactory implements IFactory{

	@Override
	public IUser createUser() {
		return new SqlServerUser();
	}

	@Override
	public IDepartment createDepartment() {
		return new SqlServerDepartment();
	}

}
6、测试
public class Test {
	public static void main(String[] args) {
		User user = new User();
		Department department = new Department();
		IFactory factory = new SqlServerFactory();
		IUser iu = factory.createUser();
		iu.insert(user);
		iu.getUser(1);
		IDepartment id = factory.createDepartment();
		id.insert(department);
		id.getDepartment(1);
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值