工厂模式之抽象工厂
2023-04-18 13:13:09 时间
工厂模式之抽象工厂
是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。类继承自抽象工厂,即可生产指定对象。新增实体的时候无需修改已有代码。比如食物这个工厂,在现实世界中,它可以生产面包、鸡蛋、肉等,在魔法世界中,食物工厂可以生产魔法豆、会唱歌的火鸡、HP口服液等,我们把食物比作是最大的一个抽象工厂,现实世界(ModernFactory)抽象工厂和魔法世界(MagicFactory)抽象工厂继承自最大的食物抽象工厂,然而bread面包、egg鸡蛋、meat肉类都继承自ModernFactory抽象工厂、MagicBeans魔法豆等继承自MagicFactory,我们把食物的世界分为了现实和魔法两族,而这两族中又分为了面包、鸡蛋、火腿肠、啤酒、饮料、矿泉水等更为具体族(对象),当我们任意定制新的产品一族时就无需再修改已有代码,只需根据产品分类不同,继承自不同的工厂即可,一步步化抽象为具体,抽象工厂实际最大的好处就是实现了代码的解耦。
talk is cheaper,show me your code.
Abstractory.class
/**
* @author Liutx
* @date 2020/12/8 22:18
* @Description
*/
public abstract class Abstractory {
/**
* 抽象工厂可以生产食物
* @return
*/
abstract Food createFood();
}
Food.class
public abstract class Food {
abstract void printName();
}
MagicBeans.class
public class MagicBeans extends Food{
@Override
void printName() {
System.out.println("I create MagicBeans");
}
}
Bread.class
public class Bread extends Food{
@Override
void printName() {
System.out.println("I create Bread");
}
}
MagicFactory.class
public class MagicFactory extends Abstractory {
@Override
Food createFood() {
return new MagicBeans();
}
}
ModernFactory.class
public class ModernFactory extends Abstractory {
@Override
Food createFood() {
return new Bread();
}
}
实例解读:抽象工厂可以创建食物对象,食物大类分为现实世界的面包和魔法世界的魔法豆,面包是由现实工厂生产的,魔法豆是由魔法工厂生产的,魔法豆一族和面包一族分别继承自食物,通过代码工厂就可以根据需求生产不同的食物(调用不同的方法)。
Main.class
public class Main {
public static void main(String[] args) {
Abstractory mg = new MagicFactory();
Food mgFood = mg.createFood();
mgFood.printName();
System.out.println("======================魔法与现实的分界线=======================");
Abstractory md = new ModernFactory();
Food mdFood = md.createFood();
mdFood.printName();
}
}
输出:
I create MagicBeans
======================魔法与现实的分界线=======================
I create Bread
相关文章
- datax_web环境搭建
- EL-ADMIN
- Flink TaskManager 内存模型详解
- Flink源码
- flutter 模块化
- Flutter代码可插拨_解耦方案
- golang如何使用原生RPC及微服务简述
- Istio 实践手册 | 服务网格介绍
- IOS 列表性能优化-图片解码性能优化
- iOS 内存概述
- IOS 算法
- disruptor笔记之四:事件消费知识点小结
- 云原生第3课:Kubernetes 系统快速入门
- 日更系列:C++的异常处理到底是用还是不用
- Echo 框架: 自动添加 RequestId
- 搞定大厂算法面试之leetcode精讲3.动态规划
- OpenGL 使用 Shader 实现 RGBA 转 I420(附项目源码)
- 看动画学算法之:hashtable
- Java Review - 线程池中使用ThreadLocal不当导致的内存泄漏案例&源码分析
- Linux学习——常用命令是哪些单词的缩写