设计模式-抽象工厂模式(创建型模式)
抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。
结构图
优缺点
优点:
a.易于交换产品系列;在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。
b.具体的创建实例过程与客户端分离,客户端通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
c.增加新的产品系列,不会更改其他系列的源码,符合开放闭合原则。
缺点:
a.增加新的产品系列时,就需要增加一系列的工厂及实现,增大开发成本。
工厂方法模式和抽象工厂模式的区别
工厂方法模式是对一个具体工厂的一个输出,指向一个工厂延迟到其子类生成一个具体的实例;
抽象工厂针对的是一系列的工厂,针对解决的是全局结构性的问题,例如数据库。
这里还拿之前我写的工厂方法模式的实例来进行说明:
抽象工厂模式意味这在工厂方法模式之上,又增加了一层结构,也就是将工厂方法的一个产品增加至多个产品
下图是工厂方法模式的uml图:
这里只针对老人需要生活帮助一种产品,需要哪中帮助,就直接在其对应的工厂中生成对应的一种实例。
下图为抽象工厂uml图:其中增加了医疗帮助这一产品,这样就针对于老人的生活多出了一个系列。
与工厂方法模式最显著的改变就是新增了一系列的产品-医疗服务-护士-医生-陪护-看病。
这样 在老人需要生活帮助的时候就选择生活这一系列产品,在需要医疗服务的时候就选择医疗这一系列产品。
无论选择那一项,到最后都是只能生成一种实例。