1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 常用设计模式-抽象工厂

常用设计模式-抽象工厂

时间:2020-08-30 12:18:55

相关推荐

常用设计模式-抽象工厂

模式简介

工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类:

1. 简单工厂模式(Simple Factory)

2. 工厂方法模式(Factory Method)

3. 抽象工厂模式(Abstract Factory)

抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

抽象工厂模式的优点

抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。

抽象工厂模式的缺点

产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

实际应用场景

Spring中的BeanFactory

UML类图

案例:数据库切换

IUser

/*** @Author l'amour solitaire* @Description 用户表操作* @Date /11/19 下午3:13**/public interface IUser {/*** 新增用户**/void addUser(User user);}

MysqlUser

/*** @Author l'amour solitaire* @Description Mysql* @Date /11/19 下午3:24**/public class MysqlUser implements IUser {@Overridepublic void addUser(User user) {System.out.println("Mysql 执行了新增用户操作");}}

SqlServerUser

/*** @Author l'amour solitaire* @Description SqlServer* @Date /11/19 下午3:29**/public class SqlServerUser implements IUser {@Overridepublic void addUser(User user) {System.out.println("SqlServer 执行了新增用户操作");}}

DataAccess超级工厂

/*** @Author l'amour solitaire* @Description 抽象工厂* @Date /11/19 下午3:33**/@Data@AllArgsConstructorpublic class DataAccess {public static final String MYSQL = "Mysql";public static final String SQL_SERVER = "SqlServer";private String DB = "SqlServer";public IUser createUser() throws ClassNotFoundException, IllegalAccessException, InstantiationException {String className = String.format("com.aeert.design.abstractfactory.db.%sUser", DB);return (IUser) Class.forName(className).newInstance();}}

测试

@SpringBootTestclass DesignApplicationTests {@Testvoid test() throws IllegalAccessException, InstantiationException, ClassNotFoundException {new DataAccess(DataAccess.MYSQL).createUser().addUser(new User());new DataAccess(DataAccess.SQL_SERVER).createUser().addUser(new User());}}

欢迎关注公众号《JAVA拾贝》回复:设计模式即可获取

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。