什么是设计模式?设计模式是软件设计中出现的典型问题的通用解决方案。它们就像解决您可以自定义的典型问题的蓝图。我为什么要学习模式?设计模式的好处在于它们是针对常见问题的久经考验的解决方案。这使您能够以高效的方式解决程序中遇到的问题,而无需重新发明轮子。如果你和你的团队成员了解模式,它可以帮助提高沟通的有效性。使用模式也有一些缺点。当您了解不同的软件模式时,您可能会尝试实现您不需要或不是最佳解决方案的模式。另一个可能的缺点是试图过于字面地实现一个模式,而不是根据项目的上下文对其进行裁剪。模式分类设计模式一般分为三类:创建型模式、结构型模式和行为型模式。创建型模式描述了创建对象的方法,这些对象可以提高代码的可重用性和灵活性。结构模式为如何将对象和类构造成更大的结构提供了模式,同时使它们具有适应性和效率。行为模式描述了对象之间有效通信和责任委派的模式。让我们探索一些更常见的软件设计模式。Factory方法Factory方法解决了创建对象时不必指定要创建的确切类的问题。超类定义了创建对象的接口,子类实现了创建对象的具体逻辑。例如,您可以引入一个名为ShapeFactory的工厂接口,其中包含一个名为createShape的方法,该方法返回一个Shape类型的对象。具体的实现,例如CircleFactory和RectangleFactory,将实现createShape方法以返回Circle和Recangle类型的对象。工厂模式的优点之一是您可以通过添加新的子类来引入新类型,而无需破坏现有代码。SingletonSingleton是一种创建模式,它只允许一个类的一个实例。要创建单例类,类的默认构造函数需要是私有的。这确保其他类不能调用单例类上的新方法。不使用默认构造函数,而是创建一个静态创建方法。如果对象不存在,该方法将调用私有构造函数,否则将返回已存在的缓存对象。单例类解决的问题是它确保一个类只有一个实例,并且它可以提供对该实例的全局访问点。单例类对于缓存、日志记录和注册表等类很有帮助。BuilderBuilder是一种创建模式,允许您逐步创建复杂的对象。这允许使用相同的构造代码来实现不同的类型和表示。如果有一个类可以有很多变体,那么构造函数就会变得非常庞大和混乱。例如,想象一个带有许多额外设备(防抱死制动器、加热座椅、后视摄像头等)的“汽车”课程。与其使用一个包含所有选项的大型汽车构造函数,不如使用构造函数类。一个建造者类可以有一系列方法来建造汽车的不同变体。例如buildFrame、addWheels、addBrakes、addRearViewCamera等。建造者模式的好处是在构造不同的对象时可以复用相同的构造代码,构造代码与产品的业务逻辑隔离。适配器适配器模式是一种允许具有不同接口的两个类进行通信的模式。适配器作为类之间的转换器工作,因此它们可以一起工作。例如,如果一个类输出XML而另一个类需要JSON输入。然后需要一个适配器将XML转换为JSON。代理代理是一种结构模式,允许您通过创建替代品或占位符来控制对对象的访问。如果有服务或资源不是一直在运行,代理可以处理服务的初始化。这消除了在使用服务的任何地方复制初始化代码的需要。代理模式建议您创建一个与原始对象具有相同接口的新代理类。然后你可以在你的程序中使用代理对象来代替原来的对象。然后代理将工作委托给原始对象。使用代理的优点是您可以控制对原始对象的访问,即使原始对象关闭,代理也能正常工作。状态状态模式处理对象在其内部状态发生变化时的行为。例如,当对象处于某种状态时,某些行为是不允许的。状态模式与有限状态机密切相关。这告诉我们一个程序只能处于一定数量的状态。每个状态的行为都不同,并非所有状态都可以互换。要创建封装状态之间的转换规则和状态行为的逻辑,条件语句(if、switch或模式匹配)很常见。如果有很多状态,这个逻辑会变得非常庞大并且难以维护。状态模式通过为每个状态实现类来解决这个问题。每个状态类都处理自己的行为和转换到新状态的逻辑。原始对象(也称为上下文)通过用新状态对象替换活动状态对象来更改状态。所有状态对象都需要符合一个公共接口。StrategyStrategy模式允许在一个抽象下对一系列算法进行分组。这允许运行时在算法之间切换。策略模式与状态模式非常相似。它不处理不同的状态,而是处理不同的算法或策略。例如,谷歌地图提供了驾车、步行、公共交通等导航选项。.这些选项使用不同的算法,但都可以在同一个客户端中使用。Strategy模式为不同的策略使用一个通用接口。原始类独立于具体策略。原始类有一个字段用于存储策略对象。特定的策略对象负责执行算法。客户负责选择正确的算法。使用策略模式的一个优点是您可以在未来添加额外的算法而不会使原始类混乱。观察者观察者是一种描述订阅机制的模式,该机制允许多个对象在它们观察到的对象发生变化时得到通知。观察对象通常被称为主题或发布者。发生变化时通知的对象称为订阅者。YouTube是这种观察者模式的一个例子,只要频道发布新视频,就会通知关注者。发布者类应该有添加和删除订阅者以及通知所有订阅者的方法。所有订阅者都应该具有相同的接口和方法,发布者可以调用这些接口和方法来通知他们更改。通常,发布者有一个订阅者列表,遍历订阅者,并调用订阅者的“更新”方法来通知他们对发布者的更改。
