一、模式介绍
1、工厂模式
工厂模式属于创建型模式,即解决的是如何创建一个类的对象问题。
常见的创建对象是自己使用new,这样是不是感觉有点普通,
如果有一种高逼格的方式可以将对象创建出来,是不是让人刮目相看。
工厂模式就能让你做到这一点。
2、分类
简单工厂模式
工厂方法
抽象工厂
3、使用场景
1.不想自己new对象,防止这个类改变的时候在new的地方到处去改,麻烦且容易遗漏
2.要创建类的对象构建过程非常复杂,不想在代码的各个地方将这么复杂的构建过程反复书写
3.这个类的对象在构建过程中依赖了很多其他的类,而你无法在调用的地方提供
二、简单工厂模式
1、实现步骤
第一步:定义产品抽象类,比如鞋子(Shoes.class)
java
// 1、定义鞋 产品抽象基类
abstract class Shoes {
// 展示logo
public abstract void showLogo();
}
第二步:定义具体产品类,继承产品抽象类。比如飞跃牌鞋子(FeiYueShoes.class)、回力牌鞋子(HuiLiShoes.class)
java
//2.定义具体品牌的鞋类,继承鞋抽象基类
public class FeiYueShoes extends Shoes {
@Override
public void showLogo() {
System.out.println("这是飞跃鞋");
}
}
java
//2.定义具体品牌的鞋类,继承鞋抽象基类
public class HuiLiShoes extends Shoes {
@Override
public void showLogo() {
System.out.println("这是回力鞋");
}
}
第三步:定义简单工厂类,使用一个静态工厂方法根据不同产品条件生成不同产品。比如鞋厂(ShoesFactory.class)
java
// 3、定义简单工厂方法类,使用一个静态工厂方法来根据不同的品牌条件来产生不同品牌的鞋
public class ShoesFactory {
// 静态工厂方法,生产鞋子
public static Shoes produceShoes(String brand){
Shoes shoes = null;
switch (brand){
case "feiyue":
shoes = new FeiYueShoes();
break;
case "huili":
shoes = new HuiLiShoes();
break;
default:
System.out.println("错误品牌");
break;
}
return shoes;
}
}
第四步:使用简单工厂模式,生成产品。比如(ShoesFactoryExample.class)
java
// 4、使用简单工厂模式,生成产品
public class ShoesFactoryExample {
public static void main(String[] args) {
//生产飞跃鞋子
Shoes feiYueShoes = ShoesFactory.produceShoes("feiyue");
feiYueShoes.showLogo();
//生产回力鞋子
Shoes huiLiShoes = ShoesFactory.produceShoes("huili");
huiLiShoes.showLogo();
}
}
2、总结
简单工厂模式的出现,使我们通过传入不同的参数类型,可以创建不同类型的对象实例。
将对象的构建完全交给简单工厂方法类(ShoesFactory.class)
3、缺点
违法开闭原则(对扩展开放,对修改关闭),破坏其内聚性,给维护带来额外开支,
比如新增一种产品(老北京布鞋)就要修改静态工厂方法,而不是扩展,这就是所谓违反了开闭原则
工厂方法模式解决了这一问题。