likes
comments
collection
share

十种常见设计模式的应用场景与使用方法

作者站长头像
站长
· 阅读数 14

学好设计模式有助于提高代码的质量,使代码更易于维护和扩展。以下是一些常见设计模式的简单应用场景和使用方法,如有错误之处,望指正!

工厂模式

应用场景: 在需要根据不同条件创建具有相同行为或者接口的对象时,可以使用工厂模式。比如,一个电商网站可能会销售多种类型的商品(例如服装、数码产品等),每个商品都需要实现一些基本操作(例如上架、下架、查询库存等),因此可以使用工厂模式来创建商品对象。

使用方法: 定义一个工厂接口或抽象类,根据不同的需求定义不同的工厂类,每个工厂类负责生产相关的产品。

单例模式

应用场景: 当需要确保系统中只有一个实例时,可以使用单例模式。比如,一个系统中只需要一个日志记录器来记录所有的操作日志,那么就可以使用单例模式。

使用方法: 使用私有构造函数创建类的唯一实例,在类中提供一个静态方法来获取该实例。

观察者模式

应用场景: 当一个对象状态发生变化需要通知其他对象时,可以使用观察者模式。比如,在一个在线购物网站中,当某个商品库存量发生变化时,需要通知订阅该商品的用户,此时就可以使用观察者模式。

使用方法: 定义一个主题接口或者抽象类,其中包含添加、删除、通知观察者的方法;然后定义具体主题类和观察者类,并实现相应的方法。

策略模式

应用场景: 当需要根据不同条件选择不同算法执行时,可以使用策略模式。比如,在一个电商网站中,计算商品价格可能会根据不同地区而有所不同,此时就可以使用策略模式。

使用方法: 定义一个策略接口或者抽象类,其中包含执行算法的方法;然后定义不同的具体策略类,并实现相应的方法。

模板方法模式

应用场景: 当需要继承多个类并实现其中部分方法时,可以使用模板方法模式。比如,在一个游戏开发中,各种角色可能会有不同的行动方案,但是每个角色都有相同的攻击方法,此时就可以使用模板方法模式。

使用方法: 定义一个抽象类,其中包含一个模板方法和若干个抽象方法;然后定义具体子类,并实现相应的抽象方法。

代理模式

应用场景: 当需要控制客户端与实际对象之间的交互时,可以使用代理模式。比如,在一个大型系统中,某些对象需要保护起来,只允许特定的用户进行访问,此时就可以使用代理模式。

使用方法: 定义一个代理类,在代理类中创建实际对象,并提供与实际对象相同的接口。

装饰器模式

应用场景: 当需要在运行时扩展对象功能时,可以使用装饰器模式。比如,在一个文字处理软件中,某些文本需要加粗、斜体等样式,此时就可以使用装饰器模式。

使用方法: 定义一个装饰器类,该类实现与被装饰类相同的接口,并在其中包含被装饰对象的引用;然后定义具体装饰器类,继承自装饰器类,并在其中添加额外的功能。

建造者模式

应用场景: 当需要构建复杂对象且构建过程需要多个步骤时,可以使用建造者模式。比如,在一个汽车制造厂中,汽车的制造需要分多个步骤进行,此时就可以使用建造者模式。

使用方法: 定义一个抽象建造者类,其中包含构造产品各个部件的抽象方法;然后定义具体建造者类,继承自抽象建造者类,并实现相应的抽象方法;最后定义一个指挥者类,负责协调各个建造者类。

迭代器模式:

应用场景: 需要遍历一个集合中的元素,但是又不想暴露该集合的内部结构。比如对于一个网站的用户列表,管理员需要对用户进行操作,但是不想暴露用户列表的实现细节。

使用方法: 首先定义一个迭代器接口,包含 hasNext() 和 next() 方法;然后定义一个实现了迭代器接口的具体迭代器类,该类实现了具体的遍历逻辑;最后定义一个集合类,实现迭代器接口,并且返回具体迭代器类的实例。

责任链模式:

应用场景: 当需要处理一个请求,并且有多个对象可以处理该请求,但是每个对象处理请求的方式不同,且具有处理请求的先后顺序,就可以使用责任链模式。比如一个报销流程,需要多个领导审批,但是每个领导审批的标准不同,且有些领导需要在前面审批通过后才能审批。

使用方法: 首先定义一个抽象处理器类,包含一个处理方法和一个指向下一个处理器的指针。然后定义具体的处理器类,它们实现了处理方法,并且设置好下一个处理器的指针。最后定义一个责任链类,负责将请求传递给责任链中的第一个处理器,并且将处理结果返回给请求者。

转载自:https://juejin.cn/post/7226651307523178555
评论
请登录