设计模式的由来与学习的必要性,真的知道吗?

目录

设计模式的由来

设计模式的特点

设计模式分类

创建型模式

结构型模式

行为型模式

设计模式的原则好处

单一职责原则

开闭原则

里氏替换原则

接口隔离原则

依赖倒置原则

学习设计模式的步骤

第一步:学习基本概念

第二步:了解常见的设计模式

第三步:实践设计模式

第四步:分享你的实践经验


设计模式不知道各位对这些有哪些理解?最近则在看相关的设计模式的书,有些模式我也有些云里雾绕的,借此机会,深入拜读一下设计模式的经典书籍,有一些更加深层次的理解,在此以文章的形式分享出来,希望可以帮助一些朋友,更加深入的理解设计模式的内在美,可以非常自然的使用到设计模式的魅力,希望能够为大家带来启发和帮助。

设计模式的由来

设计模式的概念最早出现在20世纪80年代,由著名的计算机科学家Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides等人在他们的著作《设计模式:可复用面向对象软件的基础》中首次提出。这本书被誉为"设计模式圣经",并成为软件开发领域的经典著作。

设计模式是一种解决特定问题的经过验证的解决方案,它是可复用的,并且能够帮助开发人员设计和构建更好的软件系统。每个设计模式都描述了一个问题,以及如何使用面向对象的方法解决该问题。设计模式可以帮助开发人员更好地组织和管理代码,提高代码的可读性和可维护性。

虽然这本书已经出版了30多年,但它仍然是软件开发人员们必读的书籍之一,因为它提供了一些重要的概念和技术,这些概念和技术可以帮助开发人员更好地设计和构建软件系统。设计模式是软件开发领域中不可或缺的一部分,它能够让开发人员更加高效地工作,减少出错的机会,提高软件的质量和可靠性。

设计模式的特点

设计模式是一种解决特定问题的经过验证的解决方案。在软件开发的过程中,经常会出现一些常见的问题,例如如何实现可扩展性可维护性和灵活性等等。这些问题往往不是单个技术或工具可以解决的,需要一种更加抽象的、通用的解决方案。设计模式就是这样一种解决方案,它提供了一些通用的、经过验证的方法和技术,可以帮助开发人员解决这些常见问题。

设计模式的职责是提供可复用的解决方案,这些解决方案可以帮助开发人员更好地设计和构建软件系统。设计模式的必要性在于,它可以帮助开发人员更好地组织和管理代码,提高代码的可读性和可维护性。设计模式还可以提高软件系统的灵活性和扩展性,使得系统更加容易扩展和修改。

举个例子,比如我们想要实现一个购物车功能,但是我们不想在每个商品页面里都写出购物车的具体实现,这样会造成代码的重复和可维护性的下降。这时候,我们可以使用设计模式中的“工厂模式”,将购物车的创建过程抽象出来,封装在一个工厂类中,商品页面只需要调用工厂类即可得到购物车对象。这样,我们的代码更加模块化,可读性和可维护性也会得到提高,而且如果将来需要修改购物车的实现方式,只需要修改工厂类中的代码即可,而不需要修改每个商品页面中的代码。

设计模式的另一个重要特点是它是可复用的。这意味着,开发人员可以将设计模式应用到不同的项目中,而不需要重新发明轮子。这样可以大大提高开发效率,减少代码的重复性。设计模式还可以提高代码的可读性和可维护性,因为它们提供了一种通用的、易于理解的方式来解决常见问题。这样,其他开发人员可以更轻松地理解和修改代码,从而减少出错的机会。

设计模式分类

设计模式是软件开发领域中的一种解决问题的通用方法,通过使用设计模式,开发人员可以更好地组织和管理代码,并设计出更好的软件系统。设计模式可以分为三种类型:创建型模式、结构型模式和行为型模式。

创建型模式

创建型模式主要解决对象创建的问题,包括对象的创建、组合和表示等。创建型模式可以帮助开发人员创建对象的方法更加灵活,同时也可以避免在代码中直接使用new关键字,提高代码的可扩展性和可维护性。

重要的创建型模式包括:

  • 工厂模式(Factory Pattern):通过工厂类来创建对象,将对象的创建过程与具体的业务逻辑分离开来。
  • 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关对象的接口,而不需要指定具体的类。
  • 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。
  • 建造者模式(Builder Pattern):将一个复杂对象的构建过程分离出来,使得同样的构建过程可以创建不同的表示。

结构型模式

结构型模式主要解决对象之间的组合问题,包括对象之间的关联、继承和实现等。结构型模式可以帮助开发人员更加灵活地组合对象,同时也可以使对象之间的关系更加清晰。

重要的结构型模式包括:

  • 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。
  • 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,同时又不改变其结构。
  • 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。
  • 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,使得子系统更加容易使用。

行为型模式

行为型模式主要解决对象之间的通信问题,包括对象之间的协作和职责分配等。行为型模式可以帮助开发人员更加清晰地分离对象之间的职责,同时也可以使对象之间的通信更加灵活。

重要的行为型模式包括:

  • 观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者都会收到通知并自动更新。
  • 策略模式(Strategy Pattern):定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
  • 命令模式(Command Pattern):将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
  • 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

设计模式的原则好处

单一职责原则

单一职责原则的好处在于,它确保每个类或模块只负责一件事情。这意味着你可以更容易地维护和修改你的代码,因为每个类或模块的责任是清晰定义的。这也使得代码更容易测试,因为你可以将每个类或模块的测试分开。

开闭原则

开闭原则的好处在于,它使得你的代码更容易扩展。当你需要添加新的功能或修改现有的功能时,你只需要添加或修改现有的代码,而不需要对现有的代码进行大规模的修改。这使得你的代码更容易维护和测试,因为你只需要关注你添加或修改的代码。

里氏替换原则

里氏替换原则的好处在于,它确保你的代码更加抽象和可重用。当你使用基类对象替换派生类对象时,你的代码应该继续工作,而不是崩溃。这使得你的代码更容易维护和测试,因为你可以使用基类对象来测试你的代码,而不需要使用派生类对象。

接口隔离原则

接口隔离原则的好处在于,它确保你的代码更加模块化和可重用。当你将接口分成更小的和更具体的接口时,你可以更容易地编写和维护代码,因为每个接口只包含必要的方法。这使得你的代码更容易测试,因为你可以将每个接口的测试分开。

依赖倒置原则

依赖倒置原则的好处在于,它确保你的代码更加灵活和可扩展。当你使用依赖注入或工厂模式时,你可以将依赖项从高层次的模块中分离出来,从而使得你的代码更容易测试和修改。这使得你的代码更容易维护和测试,因为你可以将依赖项的测试分开。

看完了上面的篇幅之后,首先感谢你可以看到这里,看来你真的想打算学习设计模式,接下来,我们来聊一聊相关的学习步骤

学习设计模式的步骤

第一步:学习基本概念

在学习设计模式之前,你需要了解一些基本概念。这包括面向对象编程的基础知识,例如类、对象、继承、多态等等。这些基本概念是设计模式的基础,你需要对它们有一个深入的理解,千万不要了解概念之后,强行记忆,即使记忆了也没用,因为你只看懂了字,不懂字里行间所代表的意义

第二步:了解常见的设计模式

设计模式有很多种,我们需要记忆一些常用的和基础的,例如单例模式、工厂模式、观察者模式等等。你需要花时间来了解这些设计模式的概念和用途。在学习这些设计模式时,你可以使用书籍、网络资源和课程,以帮助你更好地理解它们的概念和用途。

第三步:实践设计模式

理论知识是很重要的,但是只有当你将这些知识应用到实际项目中时,你才能真正理解设计模式的用途和价值。你可以找一些网上常见的面试题,思考一下,首先实现功能,之后再去想有没有优化的方案,慢慢的去找有没有哪些设计模式可以用得上,这里我推荐初学者想一下,如何以面向对象的方式实现一个计算器?   觉得比较初级,没关系,我们可以看一些开源项目,看看他们如何使用设计模式来解决问题,读代码去了解相关的设计模式,理论+实践有助于你更好地理解它们的实际用途,并且让你更好地掌握它们,这里推荐Mybatis的源码。

第四步:分享你的实践经验

最后,你可以与其他开发者分享你的实践经验。这可以是通过博客、社交媒体或者参加技术会议来实现。这将帮助你巩固你的知识,并将你的技能提升到更高的水平。当你分享你的经验时,你可以从其他人的反馈中学到更多,这将有助于你更好地掌握设计模式。

学习设计模式需要花费时间和精力,但是它可以使你成为一个更好的开发者。如果你按照这些步骤来学习,你将会掌握设计模式的基本概念、了解常见的设计模式、实践设计模式,并与其他开发者分享你的实践经验。最终,你将成为一个更加优秀和有经验的软件开发者,可以在未来的项目中更好地应用设计模式,加油各位,如果感觉对您有所帮助,还希望可以加个关注呀,之后分享具体的设计模式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

提升自己的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值