工厂模式

工厂模式主要是为了解耦,为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。工厂模式可以分为3类:简单工厂模式、工厂方法模式、抽象工厂模式。

1)  简单工厂模式

简单工厂模式又称静态工厂方法模式。它存在的目的很简单:定义一个用于创建对象的接口。先来看看它的组成:

A.  工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品。(我的项目中的DaoFactory类,通过读取配置文件中MySqlUserDao2类对应的key创建了MySqlUserDao2类的实例。项目中DaoFactory类里面用静态方法创建了factory对象,在UserService类中直接用DaoFactory类名来访问factory对象,通过factory对象调用DaoFactory类里面创建MySqlUserDao2类对象的方法。)

B.  抽象产品角色:它一般是具体产品继承的父类或者实现的接口。(项目中的UserDao类,定义了根据用户名查找用户,添加用户,根据用户名密码查找对应的用户这3个方法)

C.  具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。(MySqlUserDao2类,,实现了UserDao类中定义的3个方法)

对这个项目而言,如果我想在UserDao类中再加一个A方法,对产品部分来说,他是符合开闭原则的,主需要再加一个具体产品角色(MySqlUserDao1类),来实现这个A方法。因为简单工厂模式只有一个工厂类来应对这些产品,要在工厂类中增加相应的创建业务逻辑(创建MySqlUserDao1类的对象),这显然是违背开闭原则的。那么就需要工厂方法模式。

2)  工厂方法模式

工厂类定义成了接口,而每新增一个方法,就增加该方法对应工厂类的实现,这样工厂的设计就可以扩展了,而不必去修改原来的代码。

工厂方法模式组成:

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

B.  具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。(项目中的DaoFactory类,通过读取配置文件中MySqlUserDao2类对应的key创建了MySqlUserDao2类的实例。DaoFactory2类,通过读取配置文件中MySqlUserDao1类对应的key创建了MySqlUserDao1类的实例。)

C.  抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。(项目中的UserDao类,定义了根据用户名查找用户,添加用户,根据用户名密码查找对应的用户这3个方法.还有新增加的A方法)

D.  具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。(MySqlUserDao2类,,实现了UserDao类中定义的3个方法。MySqlUserDao1类,实现了UserDao类中定义的A方法。)

工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中唯一的工厂类。正如上面所说,这样便分担了对象承受的压力;而且这样使得结构变得灵活起来——当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成,那么就可以被客户使用,而不必去修改任何已有 的代码。可以看出工厂角色的结构也是符合开闭原则的!

3)  抽象工厂模式

抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。比如,客户自己创建宝马车,就是不用工厂模式。客户需要宝马A系列,让一个工厂去创建宝马A系列,客户不需要关心车是怎么创建的,这是简单工厂模式。客户不但需要宝马A系列,还想要B系列,C系列。如果把这个3个系列的车都给一个工厂去解决,这个工厂压力太大了。需要在创建几个工厂,每个工厂负责一个车系列。这是工厂方法模式。现在客户要求提高,每个系列的车还要配有发动机和空调。宝马A系列配置A型号空调和A型号发动机,宝马B系列配置B型号空调和B型号发动机。让原来负责生产A车的工厂在生产A车的同时也生产A空调和A发动机。B工厂也同理。这就是抽象工厂模式。

工厂方法模式:

一个抽象产品类,可以派生出多个具体产品类。  

一个抽象工厂类,可以派生出多个具体工厂类。  

每个具体工厂类只能创建一个具体产品类的实例。

抽象工厂模式:

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。  

一个抽象工厂类,可以派生出多个具体工厂类。  

每个具体工厂类可以创建多个具体产品类的实例。  

区别:

工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。  

工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式,在形式和特点上也是极为相似的,他们的最终目的都是为了解耦。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值