一 、简单工厂模式
简单工厂就是一个类中一个或多个创造的方法,这些创造方法里面可以通过接收到的参数进行判断,去完成需要输出的结果。
下面这个例子就是一个工厂生产不同档次的小汽车的例子。
现在得有会造车的工人:
public interface ICar{} //先定义一个小汽车的接口
//三种级别的车实现接口,先不写里面的方法啦
//高档
public class TopCar implements ICar{}
//中档
public class MidCar implements ICar{}
//低档
public class LowCar implements ICar{}
下面要造一个简单工厂了:
public class CarSimpleFactory{
public static ICar create(String mark){//工厂里的一个造车的车间
ICar item = null;//车壳先准备好
if(mark.equals("低档")){//需要低档车
item = new TopCar();//造车
}else if(mark.equals("中档")){//需要中档车
item = new MidCar();//造车
}else(mark.equals("高档")){//需要高档车
item = new TopCar();//造车
}
return item; //造好了
}
}
以上一个最简单的工厂模式就完成了。简单工厂通常作为工具类来使用,通常是静态的。简单工厂最大特点是从工厂中可以很直观的得到每种类别的生产数目。
二、工厂模式
上面的简单工厂模式,如果现在要声场一种豪车的话,需要先有一个造车的工人(新增ICar子类),需要在create工厂中增加豪车流水线(if)。现在我不想改我的工厂了怎么办?
首先前面部分不变:
public interface ICar{} //先定义一个小汽车的接口
//三种级别的车实现接口,先不写里面的方法啦
//高档
public class TopCar implements ICar{}
//中档
public class MidCar implements ICar{}
//低档
public class LowCar implements ICar{}
现在,我们造一个厉害点的工厂:
public abstract class AbsFactory{//抽象工厂
public abstract ICar create();
}
现在需要做什么车改流水线(小工厂)就可以了
就先写个高档的吧,其他的一样:
public class TopFactory extends AbsFactory{
public ICar create(){
return new TopCar();//返回了一个高档车的对象
}
}
测试类:相当于我们没有改工厂,只是改了分出来的抽象的方法(流水线)
public class CarTest{
public static void main(String []args){
AbsFactory item = new SurperFactory(); //多态创建一个豪车的工厂
ICar car = item.create(); // 高档汽车造出来了
}
}
三、抽象工厂
还有一种模式叫抽象工厂模式被单拿了出来,虽然被单独提到,但是本质上和第二种工厂模式在本质上是一致的,只是抽象工厂可以生产多种产品,工厂模式相对来说是单一产品。
举个栗子,比如现在工厂不光造汽车了,开始也要造卡车了,也区分高中低档:
汽车那都一样:
public interface ICar{} //先定义一个小汽车的接口
//三种级别的车实现接口,先不写里面的方法啦
//高档
public class TopCar implements ICar{}
//中档
public class MidCar implements ICar{}
//低档
public class LowCar implements ICar{}
现在仿照汽车给卡车也造一个
public interface ITruck{} //先定义一个卡车的接口
//三种级别的车实现接口,先不写里面的方法啦
//高档
public class TopTruck implements ITruck{}
//中档
public class MidTruck implements ITruck{}
//低档
public class LowTruck implements ITruck{}
跟工厂模式一样,咱们来定义一个厉害的抽象工厂,这次工厂里面定好有汽车和卡车的小工厂
public abstract class AbsFactory{//抽象工厂
public abstract ICar create(); //汽车小工厂
public abstract ITruck create(); //卡车小工厂
}
现在开始造车了,高档小工厂为例:
public class TopFactory extends AbsFactory{
public ICar create(){
return new TopCar();//返回了一个高档车的对象
}
public ITruck create(){
return new TopTruck();//返回了一个高档卡车的对象
}
}
同理。。中档小工厂,低档小工厂都可以生产啦