工厂模式

2022-05-09 21:04:25 浏览数 (2)


1. 工厂模式(Factory Pattern)

把创建对象的工作交由工厂来完成,我们负责向工厂拿取就行,这样就不用关注创建的逻辑,也实现了解耦。

之前用过的 DbUtils,SpringIoc都有解耦,降低代码间的依赖性

工厂模式解耦,复杂的初始化过程由工厂完成,只需在工厂修改,不用再每一次出现的位置做修改

2. 具体实现

这里分为三种:

  • 简单工厂
  • 工厂方法
  • 抽象工厂

2.1 简单工厂

在一个工厂里面可以直接生产需要的产品

1.创建实体类接口

代码语言:javascript复制
public interface Animal {
	abstract void eat();
}

2.创建实体类,猫和狗

代码语言:javascript复制
public class Cat implements Animal {

	public void eat() {
		System.out.println("猫吃鱼");
	}
}
代码语言:javascript复制
public class Dog implements Animal {

	public void eat() {
		System.out.println("狗吃肉");
	}
}

3.创建工厂

代码语言:javascript复制
public class SimpleFactory {
	
	public static Animal getAnimal(String animal){
		
		if(animal.equalsIgnoreCase("Cat")){
			return new Cat();
		}
		if(animal.equalsIgnoreCase("Dog")){
			return new Dog();
		}
		return null;
	}
}

4.调用

代码语言:javascript复制
Animal cat = SimpleFactory.getAnimal("cat");
cat.eat();

Animal dog = SimpleFactory.getAnimal("dog");
dog.eat();

//猫吃鱼
//狗吃肉

2.2 工厂方法

与简单工厂不同的是,工厂方法每个工厂专门生产一种产品,有多少种产品就有多少种工厂

1.创建工厂接口

代码语言:javascript复制
public interface FactoryMethod {
	abstract Animal getAnimal();
}

2.创建工厂实体

代码语言:javascript复制
public class CatFactory implements FactoryMethod {

	public Animal getAnimal() {
		return new Cat();
	}
}
代码语言:javascript复制
public class DogFactory implements FactoryMethod {

	public Animal getAnimal() {
		return new Dog();
	}
}

3.调用

代码语言:javascript复制
CatFactory cf = new CatFactory();
// 从猫工厂拿到一只猫
Animal cat = cf.getAnimal();
cat.eat();
代码语言:javascript复制
DogFactory df = new DogFactory();
// 从狗工厂拿到一条狗
Animal dog = df.getAnimal();
dog.eat();

2.3 抽象工厂

过于累赘,就是往工厂再套上一层工厂,一个顶级工厂生产下级工厂,这些不同的下级工厂生产不同的产品,方法与上面类似

0 人点赞