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

一  简单工厂模式

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

1 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的PhoneFactory类。
2 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的Iphone接口。
3 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现,如例子中的ApplePhone类,HuaweiPhone

 

 

测试类

//创建苹果手机
IPhone phone = PhoneFactory.createPhone(PhoneTypeEnum.APPLE_PHONE);

二  工厂方法模式

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

抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现,如PhoneFactory
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现,如HuaweiPhoneFactory,ApplePhoneFactory,
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现,如Iphone接口
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现,如ApplePhone,HuaweiPhone类

 

 

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

 

//测试方法

 

三 抽象工厂方法

抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象。
而且使用抽象工厂模式还要满足一下条件:
1.系统中有多个产品族(如下文,苹果手机和苹果电池为1个产品族,苹果和华为分别为不同的产品族),而系统一次只可能消费其中一族产品(华为或者苹果)
2.同属于同一个产品族的产品以其使用。

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

抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现,如PhoneFactory,与工方法模式区别为,可以创建多种产品。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现,如HuaweiPhoneFactory,ApplePhoneFactory,
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现,如IPhone接口,IBattery接口
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现,如ApplePhone,HuaweiPhone类

 

 

//测试方法

 

抽象工厂方法的优势

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

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

  名词解释:

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

end 

posted on 2019-03-11 21:18  鑫男  阅读(215)  评论(0编辑  收藏  举报

导航