博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象工厂模式
阅读量:5977 次
发布时间:2019-06-20

本文共 2365 字,大约阅读时间需要 7 分钟。

hot3.png

抽象工厂模式(Abstract Factory Pattern)

定义:

    Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

    为创建一组相关或相互依赖的对象提供一个接口,而无需指定他们的具体类。

描述:

    工厂模式的不足:类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则。

    抽象工厂是工厂模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象。

    通过创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

通用类图:

    125245_rUco_1470003.jpg

通用代码:

    工厂类的抽象类

package AbstractFactory;public abstract class AbstractCreator {		//创建A产品方法	public abstract AbstractProductA createProductA();		//创建B产品方法	public abstract AbstractProductB createProductB();}

    产品A的抽象类

package AbstractFactory;public abstract class AbstractProductA {		//产品A共有的方法	public void shareMethod(){		System.out.println("产品A共有的业务逻辑处理方法...");	}		//产品A不同子产品不同实现	public abstract void doSomething();	}

    产品B 的抽象类

package AbstractFactory;public abstract class AbstractProductB {		//产品B共有的方法	public void shareMethod(){		System.out.println("产品B共有的业务逻辑处理方法...");	}		//产品B不同子产品不同实现	public abstract void doSomething();	}

    产品线1的工厂实现类

package AbstractFactory;public class Creator1 extends AbstractCreator {	@Override	public AbstractProductA createProductA() {		return new ProductA1();	}	@Override	public AbstractProductB createProductB() {		return new ProductB1();	}}

    产品线2的工厂实现类

package AbstractFactory;public class Creator2 extends AbstractCreator {	@Override	public AbstractProductA createProductA() {		return new ProductA2();	}	@Override	public AbstractProductB createProductB() {		return new ProductB2();	}}

    产品A1

package AbstractFactory;public class ProductA1 extends AbstractProductA {	@Override	public void doSomething() {		System.out.println("产品A1的业务逻辑处理方法...");	}}

    产品A2

package AbstractFactory;public class ProductA2 extends AbstractProductA {	@Override	public void doSomething() {		System.out.println("产品A2的业务逻辑处理方法...");	}}

    产品B1

package AbstractFactory;public class ProductB1 extends AbstractProductB{	@Override	public void doSomething() {		System.out.println("B1的业务逻辑处理方法...");	}}

    产品B2

package AbstractFactory;public class ProductB2 extends AbstractProductB{	@Override	public void doSomething() {		System.out.println("B2的业务逻辑处理方法...");	}}

优点:

    1.良好的封装性

    2.产品族内的约束为非公开状态

缺点:

    产品族扩展非常困难,可能要修改抽象类或接口,违背开闭原则。

使用场景:

    一个对象族(或者是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式

    例如:一个应用需要在三个不同平台上运行,则可以通过抽象工厂模式屏蔽掉操作系统对应用的影响,由不同的产品类去处理与操作系统交互的信息。

参考资料:

《设计模式之禅》          秦小波著

《JAVA设计模式》        搜集整理来自互联网

转载于:https://my.oschina.net/u/1470003/blog/222751

你可能感兴趣的文章
minikube环境安装
查看>>
稳定高效Linux虚拟主机业务完整解决方案
查看>>
自己写一个简单的模版引擎
查看>>
职业规划
查看>>
RHEL6基础之三RHEL官网获取ISO镜像
查看>>
android第九期 - QQ5.0主窗体resideMenu
查看>>
在“挑战”中成长【我与51CTO一“七”成长】
查看>>
AWS - 创建并远程访问windows实例
查看>>
Android Studio 第七十九期 - Android 支付宝数字递增显示
查看>>
马云的教、马云的会、马云的墓
查看>>
由文档那些事儿引发的思考 - 领导,您该反思了
查看>>
整体集群配置
查看>>
Azure Stack PaaS-网站(WebApp)背后是什么原理?
查看>>
新浪微博如何更近一步?
查看>>
2016! 新年快乐! 猴年快乐!
查看>>
SQL Server 2012 开发新特性:文件表
查看>>
《从0到1》杂感
查看>>
《Java从小白到大牛》之第14章 异常处理(下)
查看>>
Puppet基础篇9-Puppetmaster多环境配置
查看>>
Winform文件下载之WinINet
查看>>