Java 工厂模式
2021-02-09 本文已影响0人
索性流年
一句话总结工厂模式
- 创建你想要的对象,便是工厂模式
概述
-
工厂模式的目的是为了解耦,把对象的创建和使用过程的分开,简单来时一个对象想要调用另一个对象的方法,他只需要通过工厂直接调用,对象的创建了初始化交给工厂来处理
-
工厂模式可以降低代码重复,如若一个对象的创建方式很复杂,每次创建多需要实现大量的代码,而且很多地方都能用到,就可以吧这个对象放在工厂统一管理,既能减少代码量,也利于后期维护。
-
工厂模式有效的提高代码容错性,只要一个对象调用工厂方法成功,那么其他地方就不会出错。
工厂模式分类
- 简单工厂、抽象工厂、工厂方法、静态工厂
应用场景小案例
- 一家水果公司,每天需要生产不同种类的水果,但是一个工厂只能生产一种水果,为了满足客户要求,他只能建造不同的水果工厂,用来生产不同的水果,给客户
实现案例
- 生产水果接口
/**
* 生产水果接口
*
* @author liunian
* @date 2021/2/5 17:15
*/
public interface FruitsCompany {
/**
* 生产水果
*/
void sendFruits();
}
- 香蕉工厂
/**
* 生产香蕉
* @author liunian
* @date 2021/2/5 17:22
*/
public class BananaFruits implements FruitsCompany {
@Override
public void sendFruits() {
System.out.println("生产香蕉");
}
}
- 苹果工厂
/**
* 生产苹果
* @author liunian
* @date 2021/2/5 17:15
*/
public class appleFruits implements FruitsCompany {
@Override
public void sendFruits() {
System.out.println("生产苹果");
}
}
简单工厂
- 水果生产工厂
/**
* @author liunian
* @date 2021/2/5 17:24
*/
public class FruitsCompanyFactory {
/**
* 生产水果
* @param type 水果类型
*/
public FruitsCompany produceFruit(String type){
switch (type){
case "apple":
return new appleFruits();
case "banana":
return new BananaFruits();
default:
return null;
}
}
}
- 生产水果
/**
* @author liunian
* @date 2021/2/5 17:27
*/
public class FactoryApp {
public static void main(String[] args) {
FruitsCompanyFactory fruitsCompanyFactory = new FruitsCompanyFactory();
FruitsCompany apple = fruitsCompanyFactory.produceFruit("apple");
apple.sendFruits();
FruitsCompany banana = fruitsCompanyFactory.produceFruit("banana");
banana.sendFruits();
}
}
工厂方法
- 水果工厂
/**
* @author liunian
* @date 2021/2/5 17:24
*/
public class FruitsCompanyFactory02 {
/**
* 生产苹果
*
* @return 苹果工厂
*/
public FruitsCompany produceApple() {
return new appleFruits();
}
/**
* 生产香蕉
*
* @return 香蕉工厂
*/
public FruitsCompany produceBanana() {
return new BananaFruits();
}
}
- 生产水果
/**
* @author liunian
* @date 2021/2/5 17:27
*/
public class FactoryApp {
public static void main(String[] args) {
FruitsCompanyFactory02 fruitsCompanyFactory02 = new FruitsCompanyFactory02();
FruitsCompany apple = fruitsCompanyFactory02.produceApple();
apple.sendFruits();
FruitsCompany banana = fruitsCompanyFactory02.produceBanana();
banana.sendFruits();
}
}