定义:
在spring和其他的框架中,工厂模式被大量使用,实际上工厂模式就是帮助我们实例化对象的设计模式,因为在实际的项目中,实例化对象的同时,可能对象中有大量的初始化工作,如果每次项目有个地方用到这个实例化,后面都要加上一堆的初始化参数,变量等操作,那就太繁琐了并且后续维护难度大,我们可以把这个动作交给工厂,我们只需要调用工厂给我们提供的方法,就可以获取到初始化完成的对象。
场景:
一个客户到想网上购买一双鞋,考虑两个体育品牌,鸿星尔克和贵人鸟,
工厂方法模式:
鞋产品接口:
public interface Shoes {
/*
* @description: 展示鞋信息
*/
public void showShoes();
}
鸿星尔克鞋产品:
/*
* @description: 鸿星尔克鞋
*/
public class ERKE_Shoes implements Shoes {
@Override
public void showShoes() {
System.out.println("一双鸿星尔克鞋");
}
}
贵人鸟鞋产品:
/*
* @description: 贵人鸟鞋
*/
public class GRN_Shoes implements Shoes {
@Override
public void showShoes() {
System.out.println("一双贵人鸟鞋");
}
}
体育品牌工厂接口类:
public interface SportsFactory {
/*
* @description: 生产鞋
* @return: 对应品牌店生产的鞋对象
*/
public Shoes makeShoes() ;
}
鸿星尔克工厂类:
public class ERKEFactory implements SportsFactory{
@Override
public Shoes makeShoes() {
//初始化店员,灯光,空调,镜子等等等等
return new ERKE_Shoes();
}
}
贵人鸟 工厂类:
public class GRNFactory implements SportsFactory{
@Override
public Shoes makeShoes() {
//初始化店员,灯光,空调,镜子等等等等
return new GRN_Shoes();
}
}
测试类:
public class mainTest {
public static void main(String[] args) {
//客户买鞋
//客户想买鸿星尔克的鞋,创建鸿星尔克品牌工厂
SportsFactory sportsFactory = new ERKEFactory();
//鸿星尔克品牌工厂中创建鸿星尔克产品对象
Shoes shoes = sportsFactory.makeShoes();
//鞋信息
shoes.showShoes();
//客户想买贵人鸟的鞋,创建贵人鸟品牌工厂
SportsFactory sportsFactory2 = new GRNFactory();
//贵人鸟品牌工厂中创建贵人鸟产品对象
Shoes shoes2 = sportsFactory2.makeShoes();
//鞋信息
shoes2.showShoes();
}
}
效果:
总结:
简单工厂,是把产品对象实例化中初始化的操作给工厂,把这一块代码抽象出来,以后初始化有改动,就只需要改工厂对应方法即可
工厂方法模式,对比简单工厂,简单工厂是把所有产品实例都交给一个大工厂,而工厂方法模式把这个操作细分给了具体的品牌工厂,大工厂只提供抽象接口,具体实例化初始化由各自品牌工厂完成