

设计模式一般分为三大类:创建型模式、结构型模式、行为型模式。
今天主角是简单工厂模式,是工厂模式的一种,属于创建型的设计模式。
简单工厂模式是一种属于创建型模式的设计模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式的核心是一个工厂类,它负责实现创建所有产品实例的内部逻辑。这个工厂类提供了一个或多个静态的工厂方法,根据参数的不同返回不同类的实例。这些被创建的实例通常都具有共同的父类。
工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有实例的内部逻辑;工厂类可以直接被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它返回一个抽象产品类Product,所有的具体产品都是抽象产品的子类。
抽象产品角色是简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的公共接口,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个工厂方法,因为所有创建的具体产品对象都是其子类对象。
具体产品角色是简单工厂模式的创建目标,所有创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现定义在抽象产品中的抽象方法 。

这里也使用女娲造人的传说来演示一下简单工厂模式的使用过程,这里女娲本身实际上就是一个造人的工厂,可以造男人、造女人。
UML类图如下

伪代码演示如下:
- public interface Human {
- /**
- * 人类会吃东西
- */
- void eat();
-
- /**
- * 人类会喝东西
- */
- void drink();
- }
- public class Man implements Human{
- @Override
- public void eat() {
- System.out.println("男人一般比较喜欢吃肉");
- }
-
- @Override
- public void drink() {
- System.out.println("男人一般比较喜欢喝酒");
- }
- }
- public class Woman implements Human{
- @Override
- public void eat() {
- System.out.println("女人一般都比较喜欢吃甜食");
- }
-
- @Override
- public void drink() {
- System.out.println("女人一般都比较喝红酒");
- }
- }
- public class HumanFactory {
- public static Human create(Integer humanType){
- Human human=null;
- switch (humanType){
- case 0:
- human=new Woman();
- break;
- case 1:
- human=new Man();
- break;
- default:
- break;
- }
- return human;
- }
-
- public static void main(String[] args) {
- Human human = HumanFactory.create(1);
- human.eat();
- human.drink();
- Human woman = HumanFactory.create(0);
- woman.eat();
- woman.drink();
- }
- }

到21世纪了,现代社会的“女娲”,如果除了会造正常的男人、女人外,还会造机器人,怎么办呢?使用简单工厂方法就很简单,
1、增加一个机器人类
2、再修改一下工厂类的造人方法;
Uml类图:

伪代码演示如下:
- public class Robot implements Human{
- @Override
- public void eat() {
- System.out.println("机器人不用吃东西");
- }
-
- @Override
- public void drink() {
- System.out.println("机器人不用喝东西");
- }
- }
- public class HumanFactory {
-
- public static Human create(Integer humanType){
- Human human=null;
- switch (humanType){
- case 0:
- human=new Woman();
- break;
- case 1:
- human=new Man();
- break;
- case 2:
- human=new Robot();
- default:
- break;
- }
- return human;
- }
-
- public static void main(String[] args) {
- Human human = HumanFactory.create(1);
- human.eat();
- human.drink();
- Human woman = HumanFactory.create(0);
- woman.eat();
- woman.drink();
- Human robot = HumanFactory.create(2);
- robot.eat();
- robot.drink();
- }
- }

工厂模式是一种创建型模式,它允许你创建对象,而不必指定这些对象的类。这使得你可以在程序运行时动态地创建对象,如果一个类有多个子类,并且这些子类的创建过程比较复杂,那么使用工厂模式可以使得代码更加简洁,易于维护。
举一个例子,假设有一个订单支付功能,有两种支付方式:支付宝支付和微信支付。用户在客户端进行支付时,需要从这两种支付方式中选取一种,进行支付操作。在这种情况下,可以创建一个简单工厂模式来决定创建出哪一种支付方式的实例。
需要注意的是,虽然简单工厂模式在一定程度上降低了代码的复杂度,但在实际应用中,如果需要根据不同的条件创建不同的对象,或者需要在运行时动态地创建对象,或者需要对对象的创建过程进行复杂的控制,那么可能需要使用更复杂的工厂模式,例如工厂方法模式或者抽象工厂模式等。
优点:
缺点:
如果想要学会设计模式、用好设计模式,建议先从UML类图开始学,UML类图中不同的箭头和线条,代表的意义是不同的,这里简单的梳理了一下,如果需要可以移步这里:设计模式之基础:UML类图怎么看?_uml图怎么看-CSDN博客
