1. 工厂模式(Factory Pattern)
把创建对象的工作交由工厂来完成,我们负责向工厂拿取就行,这样就不用关注创建的逻辑,也实现了解耦。
之前用过的 DbUtils,SpringIoc都有解耦,降低代码间的依赖性
工厂模式解耦,复杂的初始化过程由工厂完成,只需在工厂修改,不用再每一次出现的位置做修改
2. 具体实现
这里分为三种:
- 简单工厂
- 工厂方法
- 抽象工厂
2.1 简单工厂
在一个工厂里面可以直接生产需要的产品
1.创建实体类接口
public interface Animal {
abstract void eat();
}
2.创建实体类,猫和狗
public class Cat implements Animal {
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Dog implements Animal {
public void eat() {
System.out.println("狗吃肉");
}
}
3.创建工厂
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.调用
Animal cat = SimpleFactory.getAnimal("cat");
cat.eat();
Animal dog = SimpleFactory.getAnimal("dog");
dog.eat();
//猫吃鱼
//狗吃肉
2.2 工厂方法
与简单工厂不同的是,工厂方法每个工厂专门生产一种产品,有多少种产品就有多少种工厂
1.创建工厂接口
public interface FactoryMethod {
abstract Animal getAnimal();
}
2.创建工厂实体
public class CatFactory implements FactoryMethod {
public Animal getAnimal() {
return new Cat();
}
}
public class DogFactory implements FactoryMethod {
public Animal getAnimal() {
return new Dog();
}
}
3.调用
CatFactory cf = new CatFactory();
// 从猫工厂拿到一只猫
Animal cat = cf.getAnimal();
cat.eat();
DogFactory df = new DogFactory();
// 从狗工厂拿到一条狗
Animal dog = df.getAnimal();
dog.eat();
2.3 抽象工厂
过于累赘,就是往工厂再套上一层工厂,一个顶级工厂生产下级工厂,这些不同的下级工厂生产不同的产品,方法与上面类似