(二)工厂模式
- GOF工厂模式定义:为创建对象定义一个接口,让子类决定实例化那个类,工厂方法让一个类的实例化延迟至子类。
- 工厂模式分类:
- (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Method Pattern)。
- (2)工厂方法(Factory Method)模式,又称多态性工厂(Polymorphic Factory)模式或虚拟构造子(Virtual Constructor)模式;
- (3)抽象工厂(Abstract Factory)模式,又称工具箱(Kit 或Toolkit)模式。
1.3 在开源框架中的使用
举两个比较常见的例子(我暂时可以准确想到的,当然还有很多很多):
(1) Spring中通过getBean("xxx")获取Bean;
(2)Java消息服务JMS中(以消息队列ActiveMQ为例)
关于消息队列ActiveMQ的使用可以查看:消息队列ActiveMQ的使用详解// 1、创建一个连接工厂对象,需要指定服务的ip及端口。 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.155:61616"); // 2、使用工厂对象创建一个Connection对象。 Connection connection = connectionFactory.createConnection();
1.4为什么要使用工厂模式?
(1)解耦:把对象的创建过程和使用过程分开;
(2)降低代码重复利用:如果创建某个对象的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多重复的代码。
(3)降低维护成本:由于创建过程都由工厂统一管理,所以发生业务逻辑变化不需要找到所有需要创建某个对象的地方去逐个修改,只需要在工厂里修改即可,降低维护成本。
关于工厂模式的作用:推荐博客:https://blog.csdn.net/lovelion/article/details/7523392
(二)简单工厂模式
创建一个可以绘制不同形状的绘图工具,可以绘制圆形,正方形,三角形,每个图形都会有一个draw()方法用于绘图.
推荐参考优秀博客案例:https://www.imooc.com/article/31360
(三) 工厂方法模式
工厂方法模式是简单工厂的仅一步深化, 在工厂方法模式中,我们不再提供一个统一的工厂类来创建所有的对象,而是针对不同的对象提供不同的工厂。也就是说 每个对象都有一个与之对应的工厂
- 一个类不知道它所需要的对象的类:在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体的产品对象由具体工厂类创建;客户端需要知道创建具体产品的工厂类。
- 一个类通过其子类来指定创建哪个对象:在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性和里氏
- 将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无需关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中。
推荐参考优秀博客案例:https://www.imooc.com/article/31360
(四)抽象工厂模式
在工厂方法模式中,其实我们有一个潜在意识的意识。那就是我们生产的都是同一类产品。抽象工厂模式是工厂方法的仅一步深化,在这个模式中的工厂类不单单可以创建一种产品,而是可以创建一组产品
应用场景:
- 和工厂方法一样客户端不需要知道它所创建的对象的类。
- 需要一组对象共同完成某种功能时,并且可能存在多组对象完成不同功能的情况。(同属于同一个产品族的产品)
- 系统结构稳定,不会频繁的增加对象。(因为一旦增加就需要修改原有代码,不符合开闭原则)
推荐参考优秀博客案例:https://www.imooc.com/article/31360
工厂模式参考: