工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式


工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

共同特点

封装创建对象,它们将客户端与创建对象的具体过程分离。它的使用通常伴随着多态,如:

UserDao userDao = new UserDaoMysqlImpl();
UserDao userDao = Factory.getUserImpl(“mysql”);

这样就创建了一个userDao,其中连接的是mysql数据库。

第二种方法用的是工厂模式,它相较于第一种,能够隐藏“new”的过程。我们无法判断getUserImpl里面是否使用了new,我们只能知道能够获得一个与mysql有关的userDao。具体调用了哪个类的哪个方法,得到的是userDao还是userDao的子类,如果不进去看源码,我们是一无所知的。这一种不明确即是一种抽象,通过抽象实现分离。

简单工厂模式

通过用户的选择动态化地创建类的实例。
如:JDK Calendar.createCalendar()
优点:支持动态化,即用户传入参数即可创建对象。由于参数是变量,所以可在运行时确定。因此可以使用配置文件、注解的方式实现灵活的参数传入。
缺点:违背“开放-封闭原则”。

工厂方法&抽象工厂模式

我觉得用这个定义就已经足够了:定义一个创建对象的接口,让创建对象(类的实例化)的过程延迟到其子类实现。
这样,用户将创建对象的过程分为两步。第一步,拿到具体的工厂实现类,第二步,通过工厂类(运用多态)创建对象。
优点

  1. 当需要创建多个同类对象时,若需求更改,需要创建另外一个类型的对象,这个时候只需要更改第一步创建工厂实现类的过程(只有一处),而不需要更改通过工厂创建对象的过程(有很多处)。
  2. 在简单工厂模式的基础上,通过“依赖-倒置原则”满足了“开放-封闭原则”。

缺点:代码复杂,需要创建许多类,且用户在得到创建的对象前需要手动创建具体工厂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值