简单工厂、工厂方法、抽象工厂笔记

之前博客相关链接:

简单工厂模式

简单工厂模式、工厂方法模式与抽象工厂模式的区别(转)

一、简单工厂

主要是三个角色:

  • 工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的具体业务逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的java类实现
  • 抽象产品:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个java接口或者抽象类来实现
  • 具体产品:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个java类实现

最大的问题是:工厂类集中了所有产品的创建逻辑,形成了无所不能的全职类,违反了单一职责原则,最重要的是违反了开闭原则

二、工厂方法

工厂方法解决了简单工厂的缺点,简单工厂中的工厂就一个工厂类,工厂方法中抽象出一个顶层工厂。

分析下工厂方法中的角色:

  • 抽象工厂:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。

  • 具体工厂:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。

  • 抽象产品:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口

  • 具体产品:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。

    优点:遵守了开闭原则、

    缺点:每新增一个产品,都需要增加一个具体类和对象实现工厂,增大了开发量,另外系统复杂度也上升了。

三、抽象工厂模式

可以认为从简单工厂、工厂方法一步步演化成抽象工厂。

相比于工厂方法,一个工厂不止于只生产一个具体产品。

posted @ 2020-01-22 21:33  HeliusKing  阅读(154)  评论(0编辑  收藏  举报