您的位置:首页 > 编程语言 > Java开发

Java设计模式(十二):抽象工厂模式

2018-01-21 10:59 387 查看

抽象工厂模式(abstract factory pattern)

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

抽象工厂模式UML图



抽象工厂模式涉及的角色

抽象工厂(AbstractFactory)角色:是一个抽象接口,它里面包含所有产品创建的抽象方法。具体工厂(ConcreteFactory)角色:具体工厂角色通常是在运行时刻再创建,这个具体的工厂再去创建具有特定实现的产品对象,也就是说,为创建不同的产品对象,客户端应使用不同的具体工厂。抽象产品(AbstractProduct)角色:用来创建不同的实现。具体产品(ConcreteProduct)角色:抽象产品的实现。

示例代码

实体类 User



Java
实体类 Department



Java
抽象产品类 AbstractUser



Java
抽象产品类 AbstractDepartment



Java
产品类 MysqlUser



Java
产品类 OracleUser



Java
产品类 MysqlDepartment



Java
产品类 OracleDepartment



Java
抽象工厂类 AbstractFactory



Java
具体工厂类 MysqlFacory



Java
具体工厂类 OracleFacory



Java
客户端测试类 TestAbstractFactoryPattern



Java

抽象工厂模式优缺点

两个概念

产品等级结构:产品等级是由相同的结构的产品组成。如组成电脑的 主板、芯片组、CPU。

产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族。比如AMD的主板、芯片组、CPU组成一个家族,Intel的主板、芯片组、CPU组成一个家族。

抽象工厂模式的优点

分离接口和实现:客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦。

使切换产品族变得容易:因为一个具体的工厂实现代表的是一个产品族,比如上面例子的从Intel系列到AMD系列只需要切换一下具体工厂。

抽象工厂模式的缺点

不太容易扩展新的产品:如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类。例如,如果再增加一个项目表 Project,则需要增加三个类,AbstractProject、MysqlProject、OracleProject,还需要更改 AbstractFactory、MysqlFactory、OracleFactory 才可以实现。

Java学习资料获取(复制下段连接至浏览器即可)

data:text/html;charset=UTF-8;base64,5p625p6E5biI5a2m5Lmg6LWE5paZ5YWN6LS56aKG5Y+W6K+35Yqg5omj5omj5Y+35pivMTAxODkyNTc4MA==

漫谈JAVA中的各种锁以及最优的zookeeper分布式锁解决方案(视频)点击打开链接

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息