首页 > 技术文章 > 工厂模式

Howlet 原文



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 抽象工厂

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



推荐阅读