工厂模式与单例模式都是创建型模式
工厂模式分为:简单工厂模式,工厂方法模式和抽象工厂模式
假设我有一个小工厂制作汽车,客户说做什么我就做什么。
简单工厂
step1: 将汽车的公有方法抽出
public interface ICar{
void 启动();
}
step2:制作的汽车品牌
public class qiruiQQ implements ICar{
public void 启动(){
System.out.println("启动汽车");
}
}
public class bydF0 implements ICar{
public void 启动(){
System.out.println("启动汽车");
}
}
step3:我的简单工厂 ,客户给我什么我就创建什么
public class CarFactory{
public ICar create(Class<? extends ICar> class){
try{
if(class != null){
return class.newInstance();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
这就是简单工厂。根据客户传入状态类型 判断 去 new哪种对象 。
我的小工厂发展的不错,要规模化标准化。两个品牌也越加复杂了。
每个小汽车品牌要成立自己的生产线
public interface ICarFactory{
定义生产线标准 ICar create();
}
public class qiruiQQFactoty implements ICarFactory{
public ICar create(){
创建我自己的汽车 return new qiruiQQ();
}
}
public class bydF0Factory implements ICarFactory{
public ICar create(){
创建我自己的汽车 return new bydF0();
}
}
上述就是工厂方法
随着汽车行业不断的发展,要求更加细致,更加专业,我要将轮胎,发动机成立单独生产线.
汽车零部件也要专业化生产
public interface 轮胎{
void create();
}
public interface 发动机
void create();
}
public interface ICarFactory
轮胎 create();
发动机 create();
}
public qiruiQQ轮胎 implements 轮胎{
public void create(){
创建qieruiQQ的专属轮胎
}
}
public qiruiQQ发动机 implements 发动机{
public void create(){
创建qieruiQQ的专属发动机
}
}
public bydF0轮胎 implements 轮胎{
public void create(){
创建bydF0的专属轮胎
}
}
public bydF0发动机 implements 发动机{
public void create(){
创建bydF0的专属发动机
}
}
//qiruiQQ 生产工厂
public class qiruiQQFactory implements ICarFactory{
public 轮胎 create(){
return new qirui轮胎();
}
public 发动机 create(){
return new qirui发动机();
}
}
//bydF0 生产工厂
public class bydF0Factory implements ICarFactory{
public 轮胎 create(){
return new bydF0轮胎();
}
public 发动机 create(){
return new bydF0发动机();
}
}
上述为抽象工厂模式。(即将公有的全部抽取出来,将可独立的也抽取出来,最终在一个大厂内 整合 )