设计模式学习笔记
【摘要】 在软件开发领域,设计模式就如同建筑蓝图,指导着开发者构建结构清晰、可维护、可扩展的软件系统。无论是开发小型应用,还是大型企业级项目,掌握设计模式都能显著提升软件质量,优化开发流程。本文将带你走进设计模式的世界,深入了解其概念、分类,以及在实际开发中的应用。一、设计模式是什么设计模式由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlisside...
在软件开发领域,设计模式就如同建筑蓝图,指导着开发者构建结构清晰、可维护、可扩展的软件系统。无论是开发小型应用,还是大型企业级项目,掌握设计模式都能显著提升软件质量,优化开发流程。本文将带你走进设计模式的世界,深入了解其概念、分类,以及在实际开发中的应用。
一、设计模式是什么
设计模式由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著的《设计模式 - 可复用的面向对象软件元素》(通常被称为 “四人组书籍”,即 “Gang of Four,GoF”)首次提出。简单来说,设计模式是针对反复出现的问题,总结归纳出的通用解决方案。它并非特定的代码实现,而是一种思想、一种策略,能帮助开发者在面对复杂的软件设计问题时,迅速找到有效的解决途径。
举个例子,在游戏开发中,游戏角色的创建过程往往较为复杂,涉及多个参数的设置。使用工厂模式,就能将角色创建的过程封装起来,开发者只需关注创建什么角色,而无需关心具体的创建细节,这不仅提高了代码的可读性,也增强了代码的维护性。
二、设计模式的分类
根据目的和用途,设计模式可分为创建型、结构型和行为型三大类。
1. 创建型模式
创建型模式主要用于对象的创建过程,帮助开发者更加灵活、高效地创建对象。常见的创建型模式有单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式。
以单例模式为例,它确保一个类在系统中只有一个实例,并提供全局访问点。在日志记录器、数据库连接池等场景中,单例模式应用广泛。通过单例模式,既能避免资源的重复创建,又能保证数据的一致性。下面是单例模式的经典实现方式:
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
2. 结构型模式
结构型模式关注如何将类或对象组合成更大的结构,以实现特定的功能。常见的结构型模式有代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式和组合模式。
比如代理模式,它为其他对象提供一种代理以控制对这个对象的访问。在远程调用、权限控制等场景中,代理模式能有效隐藏目标对象的具体实现细节,增强系统的安全性和扩展性。下面是代理模式的简单示例:
interface Image {
void display();
}
class RealImage implements Image {
private String fileName;
public RealImage(String fileName) {
this.fileName = fileName;
loadFromDisk(fileName);
}
private void loadFromDisk(String fileName) {
System.out.println("Loading " + fileName);
}
@Override
public void display() {
System.out.println("Displaying " + fileName);
}
}
class ProxyImage implements Image {
private String fileName;
private RealImage realImage;
public ProxyImage(String fileName) {
this.fileName = fileName;
}
@Override
public void display() {
if (realImage == null) {
realImage = new RealImage(fileName);
}
realImage.display();
}
}
3. 行为型模式
行为型模式主要用于处理对象之间的交互和职责分配,以实现复杂的行为逻辑。常见的行为型模式有策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式和解释器模式。
以观察者模式为例,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在消息推送、事件驱动等场景中,观察者模式应用十分广泛。下面是观察者模式的简单实现:
import java.util.ArrayList;
import java.util.List;
interface Observer {
void update(String message);
}
class NewsSubscriber implements Observer {
private String name;
public NewsSubscriber(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " received news: " + message);
}
}
class NewsPublisher {
private List<Observer> subscribers = new ArrayList<>();
private String latestNews;
public void attach(Observer observer) {
subscribers.add(observer);
}
public void detach(Observer observer) {
subscribers.remove(observer);
}
public void notifySubscribers() {
for (Observer subscriber : subscribers) {
subscriber.update(latestNews);
}
}
public void publishNews(String news) {
this.latestNews = news;
notifySubscribers();
}
}
三、设计模式的优势与应用场景
1. 提高代码的可维护性
通过使用设计模式,将复杂的业务逻辑分解为多个独立的模块,每个模块负责特定的功能,使得代码结构更加清晰,易于理解和维护。当业务需求发生变化时,只需修改相应的模块,而不会影响到整个系统。
2. 增强代码的可扩展性
设计模式遵循开放 - 封闭原则,即对扩展开放,对修改封闭。在系统中引入新的功能时,只需按照设计模式的规范进行扩展,而无需修改现有的代码,降低了代码修改带来的风险。
3. 实现代码的复用性
许多设计模式都具有高度的复用性,如工厂模式、单例模式等。在不同的项目中,开发者可以直接复用这些设计模式,减少重复开发,提高开发效率。
设计模式在各种软件开发场景中都有广泛的应用。在 Web 开发中,MVC(Model - View - Controller)模式就是一种基于设计模式的架构,它将业务逻辑、数据展示和用户交互分离,提高了 Web 应用的可维护性和可扩展性。在移动应用开发中,同样可以使用设计模式来优化应用的架构,提升用户体验。
四、总结
设计模式是软件开发领域的宝贵财富,它为开发者提供了一种通用的解决方案,帮助我们应对各种复杂的软件设计问题。通过学习和应用设计模式,不仅能提升代码质量,还能培养良好的编程习惯和设计思维。
在实际开发中,要根据具体的业务需求和场景,选择合适的设计模式。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)