一)介绍
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
主要解决:主要解决接口选择的问题。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
如何解决:在一个产品族里面,定义多个产品。
优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的Creator里加代码,又要在具体的里面加代码。
二)UML类图
三)实现
在不同的数据库中添加用户,如mysql和oracle
第一步:创建一个用用户接口,增加对应的操作方法
package com.oysept.abstractfactory;
public interface IUser {
void addUser();
}
第二步:创建一个在mysql中添加用户工具类
package com.oysept.abstractfactory;
public class MysqlUser implements IUser {
@Override
public void addUser() {
System.out.println("在mysql数据库中添加用户");
}
}
第三步:创建一个在oracle中添加用户工具类
package com.oysept.abstractfactory;
public class OracleUser implements IUser {
@Override
public void addUser() {
System.out.println("在oracle数据库中添加用户");
}
}
第四步:创建一个抽象工厂类
package com.oysept.abstractfactory;
public abstract class IFactory {
abstract IUser createUser();
}
第五步:创建一个mysql操作工厂类
package com.oysept.abstractfactory;
public class MysqlFactory extends IFactory {
@Override
public IUser createUser() {
return new MysqlUser();
}
}
第六步:创建一个oracle操作工厂类
package com.oysept.abstractfactory;
public class OracleFactory extends IFactory {
@Override
public IUser createUser() {
return new OracleUser();
}
}
第七步:增加一个工厂制造者,传入相应的类型,就获取对应的工厂
package com.oysept.abstractfactory;
public class FactoryProducer {
public IFactory getFactory(String dataType) {
if ("mysql".equalsIgnoreCase(dataType)) {
return new MysqlFactory();
} else if ("oracle".equalsIgnoreCase(dataType)) {
return new OracleFactory();
} else {
return null;
}
}
}
第八步:测试
package com.oysept.abstractfactory;
public class Test {
public static void main(String[] args) {
String dataType = "mysql";
FactoryProducer producer = new FactoryProducer(); // 初始化工厂制造者
IFactory factory = producer.getFactory(dataType); // 获取工厂对象
if (factory != null) {
IUser user = factory.createUser(); // 获取用户对象
user.addUser(); // 添加用户
}
}
}
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!