创建型设计模式

单例模式

alt

工厂模式

工厂方法模式

工厂方法模式定义了一个创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。 alt

说明

  • 抽象产品类(AbstractProduct:定义了产品的抽象方法 use(),具体产品类需要实现该方法。
  • 具体产品类(ConcreteProductAConcreteProductB:实现了抽象产品类的 use() 方法,代表具体的产品。
  • 抽象工厂类(AbstractFactory:定义了创建产品的抽象方法 createProduct(),具体工厂类需要实现该方法。
  • 具体工厂类(ConcreteFactoryAConcreteFactoryB:实现了抽象工厂类的 createProduct() 方法,负责创建具体的产品。
  • 客户端类(Client:通过抽象工厂和抽象产品编程,不直接依赖具体的工厂和产品。

抽象工厂模式

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 alt

说明

  • 抽象产品族(AbstractProductAAbstractProductB:分别定义了产品族 A 和产品族 B 的抽象方法,具体产品类需要实现这些方法。
  • 具体产品类(ConcreteProductA1ConcreteProductA2ConcreteProductB1ConcreteProductB2:实现了对应抽象产品族的抽象方法,代表具体的产品。
  • 抽象工厂类(AbstractFactory:定义了创建产品族 A 和产品族 B 的抽象方法,具体工厂类需要实现这些方法。
  • 具体工厂类(ConcreteFactory1ConcreteFactory2:实现了抽象工厂类的方法,负责创建一组相关的具体产品。
  • 客户端类(Client:通过抽象工厂和抽象产品编程,不直接依赖具体的工厂和产品。

原型模式

原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需知道对象的具体创建过程。 alt

说明

  • 抽象原型类(Prototype:定义了一个克隆方法 clone(),所有具体原型类都需要实现该方法。
  • 具体原型类(ConcretePrototype:实现了 Prototype 接口的 clone() 方法,负责复制自身。它包含一个字段 field 以及相应的构造方法和获取字段的方法。
  • 客户端类(Client:通过调用原型对象的 clone() 方法来创建新对象,依赖于抽象原型类和具体原型类。

建造者模式

建造者模式是一种创建型设计模式,它将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 alt

说明

  • 产品类(Product:表示要构建的复杂对象,包含多个部分(partApartBpartC),提供了设置这些部分的方法和展示产品信息的方法。
  • 抽象建造者类(Builder:定义了构建产品各个部分的抽象方法(buildPartA()buildPartB()buildPartC())以及获取最终产品的方法 getResult()
  • 具体建造者类(ConcreteBuilder:实现了抽象建造者类的方法,负责具体的构建过程,并持有一个产品对象。
  • 指挥者类(Director:负责指挥建造过程,调用建造者的方法来构建产品,依赖于抽象建造者类。
  • 客户端类(Client:创建指挥者和具体建造者对象,并调用指挥者的 construct() 方法来构建产品,依赖于指挥者类和抽象建造者类。
Java设计模式 文章被收录于专栏

设计模式是软件开发中针对反复出现的问题所总结归纳出的通用解决方案,它可以帮助开发者更高效地构建软件系统,提升代码的可维护性、可扩展性和可复用性。

全部评论

相关推荐

04-09 20:20
已编辑
快手_Java(实习员工)
日期: 一面(4.9)岗位:Java开发实习生地点:成都背景:  双非科班、两段实习经历又是一个全程八股,问了Java基础、Java并发、JVM、设计模式、数据库、缓存、消息队列、分布式微服务、云原生、数据结构、计网、操作系统....小厂都要会这么多的嘛1. 自我介绍2. 你在实习中扮演的角色,做了哪些事情?挑一个印象比较深的讲讲3. Java中基本数据类型有哪些?4. 引用数据类型和基本数据类型有什么区别?5. 实现深拷贝和浅拷贝的方式?6. 讲一个你学过或者知道的设计模式?它的思想是什么?7. 讲讲JVM的垃圾收集机制?8. 垃圾回收算法有哪些?怎么判断垃圾?9. 线上OOM问题怎么定位?10. 如何保证线程安全?11. 在高并发的场景下系统哪些层面会受到影响,怎么解决?12. 讲讲你对缓存的理解?13. 讲讲数据库的事务?14. 事务隔离级别有哪些?15. 讲下数据库的索引?16. 使用索引需要注意什么吗?17. 谈谈你对消息队列的理解?18. 谈谈你对微服务的理解?和单体最大的区别是什么?19. 谈谈你对分布式的理解?了解CAP吗?20. 谈谈你对Docker的理解?21. 谈谈你对K8S的理解?22. TCP和UDP有什么区别?23. 讲讲WebSocket?使用有什么注意事项吗?24. 讲讲SSE?25. HTTPS是如何保证安全的?26. 动态规划和递归的区别?27. DFS和BFS的区别?28. 进程和线程的区别?29. 如何保证一个API的安全?30. 你平时是怎么学习的?你未来的职业规划是什么?
查看30道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务