您的位置:首页 > 其它

设计模式-抽象工厂模式

2018-02-28 23:00 169 查看
今天来介绍一下另一个复杂一点的抽象工厂模式。
1.UML类图



IUser和IDepartment是想要创建的产品的抽象接口,而SqlserverUser、AccessUser和SqlserverDepartment、AccessDepartment分别是其两种不同的具体产品实现类。IFactory是抽象工厂,其中定义了创建两种产品的接口,其具体实现类实现这两个方法根据需求创建不同的IUser和IDepartment实现类。
2.示例代码
IUser接口以及其对应的两个实现类public interface IUser {
void insert(User user);

User getUser(Integer id);
}
public class SqlServerUser implements IUser {
@Override
public void insert(User user) {
System.out.println("在sql server中给user表添加一条记录");
}

@Override
public User getUser(Integer id) {
System.out.println("在sql server中根据id得到user表一条记录");
return null;
}
}
public class AccessUser implements IUser {
@Override
public void insert(User user) {
System.out.println("在access中给user表添加一条记录");
}

@Override
public User getUser(Integer id) {
System.out.println("在access中根据id得到user表一条记录");
return null;
}
}
IDepartment接口以及其对应的实现类public interface IDepartment {
void insert(Department department);
Department getDepartment(Integer id);
}
public class SqlServerDepartment implements IDepartment {
@Override
public void insert(Department department) {
System.out.println("在sql server中给department表添加一条记录");
}

@Override
public Department getDepartment(Integer id) {
System.out.println("在sql server中根据id得到department表一条记录");
return null;
}
}
public class AccessDepartment implements IDepartment {
@Override
public void insert(Department department) {
System.out.println("在access中给department表添加一条记录");
}

@Override
public Department getDepartment(Integer id) {
System.out.println("在access中根据id得到department表一条记录");
return null;
}
}
IFactory抽象工厂以及其对应的两个具体实现工厂,相应的具体工厂中定义了创建User和Department的方法public interface IFactory {
IUser createUser();

IDepartment createDepartment();
}
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();
}
}
public class Client {
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(2);
}
}3.特点
抽象工厂提供一个创建一系列相关类或相互依赖对象的接口,而无需指定它们具体的类。它使得改变一个应用的具体工厂变得非常容易,它让具体的创建实例的过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: