在往下看之前,咱们来先了解下工厂的定义:工厂又称制造厂,制造业就是生产,创建的意思。咱们
来想想,java里面有什么东西是表示创建的,一想应该就知道是new吧。那我们一般会new什么东西
哩,比如new一个实例对象,new一个接口实现类对吧。这其实都是对象类。所以工厂模式,就是对类
的创建进行封装的。
1.简单工厂模式
a.上面对工厂模式做了一个简单的定义,那么咱们再来聊下,为什么一个类的创建,会专门用一种
模式来搞定呢?因为在我们直接对一个类进行new创建的时候,在某种程度上,在对这个类使用
的时候,就会强依赖这个类,如果在后期需要修改这个类的时候,代码中在对这个类的创建所有
地方都需要进行修改。
b.如何实现一个简单工厂模式
简单工厂模式的核心思想就是:通过工厂类中不同的方法,创建不同的实现类
(1)首先我们要创建一个接口,创建不同的类实现这个接口(这不就是创建接口的套路么)
(2)再创建一个工厂类,类里面封装不同的方法,返回不同的接口实现类(看到这里,spring里
面通过注解装配接口和实现类不就是类似这种套路么)
(3)最后使用这个简单工厂模式的时候,如下,即可
Product productA = ProductFactory.createA();
productA.execute();
Product productB = ProductFactory.createB();
productB.execute();
c.比如,我现在要做个苹果派,那我就可以创建一个PieFactory(派工厂),通过一个
createApple()方法,创建一个苹果派出来,如果要做一个橘子派,那我就可以通过
createOrange()方法,创建一个橘子派出来。
2.工厂方法模式
a.工厂方法模式其实就是简单工厂模式和模板方法模式的结合体,因为有些类里面可能是有一部
分公共的创建逻辑的
b.具体实现就是,在完成模板方法模式后,再套一层工厂类,也就是把之前的new AClass();动
作,变成TemplateClass.createA();即可
c.比如这个时候,创建苹果派和创建橘子派,都有一个公共逻辑,比如要将材料放入烤箱中,只是
原材料不一样,这个时候,就可以通过模板模式将公共逻辑抽出来
3.抽象工厂模式
a.抽象工厂类其实就是对不同的简单工厂类,进行组件化,有不同的组件组合模式
b.比如还是拿上面例子,上面的派都是单一口味的派,不同口味的派,有不同的工厂。一个派其实
是可以有多种双拼口味的,比如我现在想要苹果橘子派,那么我需要修改上面逻辑,创建不同
的派工厂:AppleFactory和OrangeFactory。将之前的PieFactory工厂类,改成接口。将
不同的组合封装成PieFactory接口中的方法
public interface PieFactory{
public static Pie createAppleAndOrangePie(String nameA,String nameB){
Foot footApple = AppleFactory.createApple(nameA);
Foot footOrange = OrangeFactory.createOrange(nameB);
return new PieFruits(footApple,footOrange);
}
}