抽象工厂模式设计模式

这是我的演讲的第二部分,“ 21世纪的设计模式” 。

此模式在Java代码中到处都有使用,尤其是在更多“企业”代码库中。 它涉及一个接口和一个实现。 该界面如下所示:

public interface Bakery {Pastry bakePastry(Topping topping);Cake bakeCake();
}

并执行:

public class DanishBakery implements Bakery {@Override public Pastry bakePastry(Topping topping) {return new DanishPastry(topping);}@Override public Cake bakeCake() {return new Aeblekage(); // mmmm, apple cake...}
}

更一般而言,抽象工厂模式通常是根据此结构实现的。

在此示例中, PastryCake是“抽象产品”,而Bakery是“抽象工厂”。 它们的实现是具体的变体。

现在,这是一个相当普通的示例。

实际上,大多数工厂只有一种“创建”方法。

@FunctionalInterface
public interface Bakery {Pastry bakePastry(Topping topping);
}

哦,看,这是一个功能。

这种轻率的情况在“抽象工厂”模式以及许多其他模式中非常普遍。 尽管它们大多数都提供了许多离散的功能,并提供了许多方法,但是出于灵活性的考虑,或者由于我们只需要一件事情,我们经常倾向于将它们分解为单方法类型。时间。

那么我们将如何实现这种糕点制造商呢?

public class DanishBakery implements Bakery {@Override public Pastry apply(Topping topping) {return new DanishPastry(Topping topping);}
}

好的,那很容易。 它看起来像早期的DanishBakery但不能做蛋糕。 美味的苹果蛋糕……有什么意义?

好吧,如果您还记得的话, Bakery有一种单一的抽象方法 。 这意味着它是一个功能接口

那么,此功能等效于什么?

Bakery danishBakery = topping -> new DanishPastry(topping);

甚至:

Bakery danishBakery = DanishPastry::new;

瞧 我们的DanishBakery课程已经结束。

但是我们可以走得更远。

package java.util.function;
/*** Represents a function that* accepts one argument and produces a result.** @since 1.8*/
@FunctionalInterface
public interface Function<T, R> {/*** Applies this function to the given argument.*/R apply(T t);...
}

我们可以用Function<Topping, Pastry>代替Bakery ; 它们具有相同的类型。

Function<Topping, Pastry> danishBakery = DanishPastry::new;

在这种情况下,我们可能要保留它,因为它的名称与我们的业务相关,但是通常,类似Factory的对象没有真正的领域用途,只能帮助我们解耦代码。 ( UserServiceFactory ,有人吗?)这很棒,但是在这些情况下,我们不需要显式的类-Java 8内置了一堆接口,例如FunctionSupplierjava.util.function更多接口。包装,非常适合我们的需求。

这是我们更新的UML图:

aa 好多了。

翻译自: https://www.javacodegeeks.com/2015/04/design-patterns-in-the-21st-century-the-abstract-factory-pattern.html

抽象工厂模式设计模式

抽象工厂模式设计模式_21世纪的设计模式:抽象工厂模式相关推荐

  1. 设计模式适配器模式_21世纪的设计模式:适配器模式

    设计模式适配器模式 这是我的演讲的第三部分," 21世纪的设计模式" . 适配器模式桥接世界. 在一个世界中,我们有一个概念的界面. 在另一个世界,我们有不同的界面. 这两个接口有 ...

  2. 适配器模式_21世纪的设计模式:适配器模式

    适配器模式 这是我的演讲的第三部分," 21世纪的设计模式" . 适配器模式桥接世界. 在一个世界中,我们有一个概念的界面: 在另一个世界中,我们有不同的界面. 这两个接口有不同的 ...

  3. 21世纪的设计模式:抽象工厂模式

    这是我的演讲的第二部分," 21世纪的设计模式" . 此模式在Java代码中到处都有使用,尤其是在更多"企业"代码库中. 它涉及一个接口和一个实现. 该界面如下 ...

  4. 设计模式你怎么看?--抽象工厂模式

    一  前言 在设计模式中有简单工厂,工厂方法,抽象工厂,这三种工厂方法,各自有各自的特点,但有都有共同的特点 工厂(Factory)都是围绕着工厂类转,这篇只写 "抽象工厂"相关的 ...

  5. 设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  6. 设计模式之(四)抽象工厂模式(Abstract Factory)

    工厂模式已经分析了简单工厂模式和工厂方法模式.并且了解了工厂方法模式去简单工厂模式的延伸,工厂方法模式如果不把工厂类抽象的话,就是简单工厂模式.由前面两个工厂模式可以猜测出抽象工厂模式应该是这两种工厂 ...

  7. 【JavaScript设计模式张容铭】抽象工厂模式深度剖析——关于继承与constructor属性的深度理解

    写在前面 最近阅读了张容铭的<JavaScript设计模式>一书,阅读到抽象工厂模式一节时对书上的代码产生了疑问,但同时在解决疑问的过程中,对继承又产生了新的理解. 我仔细查阅了很多文章, ...

  8. 《大话设计模式(C#实现)》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+设计模式+GoF+UML+单例模式+观察者模式+抽象工厂+代理模式+框架编程+立钻哥哥++OK+)

    <大话设计模式(C#实现)> 版本 作者 参与者 完成日期 备注 YanlzFramework_GoF_V01_1.0 严立钻 2020.02.10 ##<大话设计模式(C#实现)& ...

  9. 设计模式学习笔记(三)工厂模式中的简单工厂、工厂方法和抽象工厂模式之间的区别

    设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory).工厂方法(Factory Method ...

最新文章

  1. CF17E:Palisection——题解
  2. Java和PHP在Web开发方面的比较
  3. ZOJ-1610-Count the Colors
  4. java 反射 代码_java反射机制学习代码
  5. 支持上传文件的xhEditor for Typecho EX插件
  6. 设计模式大类--结构模式(下)
  7. 160个crackme 008 Andrénalin.1
  8. FDFS基础用法总结
  9. GLUE部分基准数据集介绍:RTE、MRPC、SST-2、QNLI、MNLI、QQP
  10. HbuilderX表格练习2
  11. 商简智能学术成果|基于深度强化学习的联想电脑制造调度(Lenovo Schedules Laptop Manufacturing Using Deep Reinforcement Learning)
  12. 计算机无法连接到指定的服务器,无法连接Windows远程服务器的几种解决办法
  13. MathType中输入破折号的教程
  14. 【SQLite】SQLite数据库使用与案例(二)
  15. 一文解决浏览器跨域问题
  16. 小目标的检测算法PGan
  17. 金蝶软件怎么修改服务器地址,金蝶软件服务器地址怎么修改
  18. HP小型机 nPartiton 分区管理
  19. GAT:图注意力模型介绍及PyTorch代码分析
  20. 世界最大主跨径飞燕式系杆拱桥成功吊装首节主拱

热门文章

  1. jzoj3844-统计损失【树形dp,换根法】
  2. P5127-子异和【线段树,树链剖分,位运算】
  3. 【2018.3.10】模拟赛之二-ssl2575 给出字符串【字符串】
  4. 2021“MINIEYE杯”中国大学生算法设计超级联赛(5)Random Walk 2(推式子+矩阵逆+矩阵乘)
  5. codeforces1497 D. Geniue(dp+图论)
  6. codeforces1471 D. Strange Definition
  7. 【矩阵乘法】沼泽鳄鱼(ssl 2511)
  8. [XSY] 树与图(树形DP、生成函数、分治NTT、重链剖分)
  9. 线段树-Pudding Monster CF526F-单调栈
  10. mybatis源码阅读(六) ---StatementHandler了解一下