1、为什么要使用工厂模式?
比方说,一位滴滴司机,如果要去开车挣钱的话,他得自己会制造汽车,然后,才能使用汽车挣
钱;对于这位司机来说,要求很高了,毕竟汽车很难制造出来;
如果使用工厂模式的话,这位司机,只需要知道汽车工厂就可以了,直接去工厂提车就行。从而降
低了对司机的技能要求。
2、工厂模式的核心本质是什么?
1、实例化对象。用工厂方法代替new操作
2、将选择实现类,创建对象的过程 进行统一的管理和控制;将调用者/客户端跟具体的实现进行解耦
3、应用场景?
A、JDK中Calendar的getInstance方法
B、JDBC中Connection对象的获取
C、Hibernate中SessionFactory创建Session
D、Spring中IOC容器创建管理bean对象
4、工厂模式的分类?
A、简单工厂模式
B、工厂方法模式
C、抽象工厂模式
5、简单工厂模式
5.1要点:
A、简单工厂模式也称为静态工厂模式,因为工厂类里一般都是使用静态方法
通过接收不同的参数来创建不同的对象实例
B、扩展性:必须修改工厂类的代码,才能进行扩展。
6 工厂方法模式
6.1要点:
A、每一实例对象,都对应着一个工厂;不再集中创建实例
B、扩展性:可以通过增加新的工厂类实现扩展,无需修改原来的代码
7、抽象工厂模式
7.1要点:
A、对不同实例对象进行组合(用来生产不同产品族的全部产品)
B、支持增加产品组,不能增加新的产品;
7.2抽象工厂代码实例:
第一,定义三个产品类
package com.xingej.patterns.factory.abstractfactory; public interface Seat { void say(); } class LowSeat implements Seat { @Override public void say() { System.out.println("----我是低级的车座哦-----"); } } class HighSeat implements Seat { @Override public void say() { System.out.println("---我是高级的车座哦-----"); }; }
package com.xingej.patterns.factory.abstractfactory; public interface Wheel { void showInfo(); } class LowWheel implements Wheel { @Override public void showInfo() { System.out.println("----我是低级车轮哦----"); } } class HighWheel implements Wheel { @Override public void showInfo() { System.out.println("----我是高级车轮哦-----"); } }
package com.xingej.patterns.factory.abstractfactory; public interface Engine { void show(); } class HighEngine implements Engine { @Override public void show() { System.out.println("----我是高级引擎哦----"); } } class LowEngine implements Engine { @Override public void show() { System.out.println("---我是低级引擎哦----"); } }
第二、定义一批产品组接口
package com.xingej.patterns.factory.abstractfactory; /** * 定义了一批产品组 * * @author erjun 2017年11月9日 下午1:49:33 */ public interface CarFactory { Engine buildEngine(); Seat buildSeat(); Wheel buildWheel(); }
第三、实现不同的产品组
package com.xingej.patterns.factory.abstractfactory; public class HighCarFactory implements CarFactory { @Override public Engine buildEngine() { return new HighEngine(); } @Override public Seat buildSeat() { return new HighSeat(); } @Override public Wheel buildWheel() { return new HighWheel(); } }
package com.xingej.patterns.factory.abstractfactory; public class LowCarFactory implements CarFactory { @Override public Engine buildEngine() { return new LowEngine(); } @Override public Seat buildSeat() { return new LowSeat(); } @Override public Wheel buildWheel() { return new LowWheel(); } }
测试:
package com.xingej.patterns.factory.abstractfactory; import org.junit.Test; public class AbstractFactoryTest { @Test public void testAbstractFactory() { CarFactory factory = new HighCarFactory(); Engine highEngine = factory.buildEngine(); highEngine.show(); Seat highSeat = factory.buildSeat(); highSeat.say(); Wheel highWheel = factory.buildWheel(); highWheel.showInfo(); } }
8、总结:
1、简单工厂,对象的创建都是在一个工厂类里实现的;(一般通过传入不同的参数,来返回不同的对象)
2、工厂方法,给每个对象都创建一个工厂,也就是说,对象的创建都分配给不同的工厂去实现,不
在集中在一个工厂里实现;
3、抽象工厂,在一个工厂里,创建一系列彼此之间有关系的对象;比方说,抽象笔记本工厂里,可
以创建主板,显卡,处理器,鼠标等等
简单工厂,工厂方法模式
代码已经上传到git上了
https://github.com/xej520/xingej-design-patterns
本文出自 “XEJ分布式工作室” 博客,请务必保留此出处http://xingej.blog.51cto.com/7912529/1981388
原文地址:http://xingej.blog.51cto.com/7912529/1981388