设计模式-抽象工厂模式
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);
}
void insert(Department department);
Department getDepartment(Integer id);
}
IUser createUser();
IDepartment createDepartment();
}
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.特点
抽象工厂提供一个创建一系列相关类或相互依赖对象的接口,而无需指定它们具体的类。它使得改变一个应用的具体工厂变得非常容易,它让具体的创建实例的过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。
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.特点
抽象工厂提供一个创建一系列相关类或相互依赖对象的接口,而无需指定它们具体的类。它使得改变一个应用的具体工厂变得非常容易,它让具体的创建实例的过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。
相关文章推荐
- 设计模式 一一一 抽象工厂模式
- 设计模式-抽象工厂模式
- 设计模式之抽象工厂模式
- c#设计模式--抽象工厂模式
- 走穿java23种设计模式-3抽象工厂模式详解
- 设计模式 - 抽象工厂模式
- 抽象工厂模式 - 设计模式学习
- JAVA设计模式(02):创建型-抽象工厂模式(Abstract Factory)
- 设计模式之抽象工厂模式
- 设计模式之抽象工厂模式
- 设计模式——抽象工厂模式
- 设计模式之十一:抽象工厂模式(Abstract Factory)
- 设计模式实例-抽象工厂模式
- 24种设计模式--抽象工厂模式【Abstract Factory Pattern】
- 23种设计模式(3):抽象工厂模式
- 设计模式第二话——工厂模式和抽象工厂模式
- Java与设计模式(03)--抽象工厂模式
- php设计模式之抽象工厂模式
- [设计模式]<<设计模式之禅>>抽象工厂模式
- 设计模式之抽象工厂模式