抽象工厂模式就是补充工厂模式的升级,可以理解为需要有多个工厂的情况下
模拟场景:实现多种数据库的操作方式。
代碼:
package test;
public class AbstractFactory {
public static void main(String[] args) {
User user = new User();
Order order = new Order();
//IFactory factory = new MysqlFactory();
IFactory factory = new OracleFactory();
IUser iuser = factory.CreateUser();
iuser.Insert(user);
iuser.GetUser(1);
IOrder iorder = factory.CreateOrder();
iorder.Insert(order);
iorder.GetOder(1);
}
}
//IFactory 抽象工厂
interface IFactory {
IUser CreateUser();
IOrder CreateOrder();
}
//MysqlFactory
class MysqlFactory implements IFactory{
@Override
public IUser CreateUser() {
return new MysqlServerUser();
}
@Override
public IOrder CreateOrder() {
return new MysqlServerOrder();
}
}
//OracleFactory
class OracleFactory implements IFactory{
@Override
public IUser CreateUser() {
return new OracleServerUser();
}
@Override
public IOrder CreateOrder() {
return new OracleServerOrder();
}
}
//User 实体类
class User {
Integer id;
String name;
Integer age;
}
//Iuser user表的操作
interface IUser {
void Insert(User user);
void GetUser(Integer id);
}
//MysqlServerUser user表的mysql操作类
class MysqlServerUser implements IUser {
@Override
public void Insert(User user) {
System.out.println("mysql方式插入一条user数据");
}
@Override
public void GetUser(Integer id) {
System.out.println("mysql方式获取一条user数据");
}
}
//OracleServerUser user表的oracle操作类
class OracleServerUser implements IUser {
@Override
public void Insert(User user) {
System.out.println("oracle方式插入一条user数据");
}
@Override
public void GetUser(Integer id) {
System.out.println("oracle方式获取一条user数据");
}
}
class Order {
Integer id;
Integer userId;
String orderSn;
}
//Iorder order表的操作
interface IOrder {
void Insert(Order order);
void GetOder(Integer id);
}
//MysqlServerOrder order表的mysql操作类
class MysqlServerOrder implements IOrder {
@Override
public void Insert(Order order) {
System.out.println("mysql方式插入一条order数据");
}
@Override
public void GetOder(Integer id) {
System.out.println("mysql方式获取一条order数据");
}
}
//OracleServerOrder order表的oracle操作类
class OracleServerOrder implements IOrder {
public void Insert(Order order) {
System.out.println("oracle方式插入一条order数据");
}
@Override
public void GetOder(Integer id) {
System.out.println("oracle方式获取一条order数据");
}
}