抽象工厂 java_java-设计模式-简单工厂,工厂方法,抽象工厂

一  简单工厂模式

(把可变化部分封装在工厂类中,当需要增加一种对象,只需要增加产品类,并在工厂中增加创建实体代码,但不符合开闭原则)

1 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的PhoneFactory类。

2 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的Iphone接口。

3 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现,如例子中的ApplePhone类,HuaweiPhone

48525a0abda1b59fe9d992ffcd01cac6.png

c978ee4fd72ca9227b6b2bfee4a95148.png

a7d897b0c7bc5786e4b44fe295ab3d9b.png

687a6fb1b854853a3077900692b8a5e5.png

测试类

//创建苹果手机

IPhone phone = PhoneFactory.createPhone(PhoneTypeEnum.APPLE_PHONE);

二  工厂方法模式

(工厂类为抽象工厂,具体工厂类继承抽象工厂,创建具体的产品的对象,一个工厂只可以生产一种产品)

抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现,如PhoneFactory

具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现,如HuaweiPhoneFactory,ApplePhoneFactory,

抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现,如Iphone接口

具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现,如ApplePhone,HuaweiPhone类

655d27bbfaaadd46a390b85deb3b78a1.png

967dbf8c1fccc535f6ca99dd528bd74b.png

8402f28dc3f6aff1c9637a973c60b320.png

产品类,复用一中的产品类

//测试方法

9f14e722b20d0010ee2d4785f8bdd504.png

三 抽象工厂方法

抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象。

而且使用抽象工厂模式还要满足一下条件:

1.系统中有多个产品族(如下文,苹果手机和苹果电池为1个产品族,苹果和华为分别为不同的产品族),而系统一次只可能消费其中一族产品(华为或者苹果)

2.同属于同一个产品族的产品以其使用。

来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):

抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现,如PhoneFactory,与工方法模式区别为,可以创建多种产品。

具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现,如HuaweiPhoneFactory,ApplePhoneFactory,

抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现,如IPhone接口,IBattery接口

具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现,如ApplePhone,HuaweiPhone类

5c47d1adf0e71bc5ea44b9dccfff62fb.png

558d8817d2690381d2a2635f28323bc3.png

24cae75e047a74902a7278eec9b831d6.png

fe051dff003a56543183884e85ecae4a.png

22ce1f49bcacc385385b2ca82daf0b50.png

//测试方法

f72db2d2577b29b98a9d84f4c9a8475e.png

抽象工厂方法的优势

1当一个产品族中的多个对象被设计成一起工作时,它能保证客户端只使用同一个产品族中的对象。

2 增加新的具体工厂和产品族很方便,无需修改已有系统,符合开闭原则

名词解释:

产品族:相关或相互依赖的对象

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值