当前位置: 首页 > news >正文

23中设计模式,以及三种常见的设计模式demo

常见的23种设计模式

在这里插入图片描述

Java设计模式是软件工程中常见的解决方案,用于解决在软件设计中反复出现的问题。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。这里,我将简单介绍三种常见的设计模式,并给出相应的Java代码示例。

1. 工厂方法模式(Factory Method Pattern) - 创建型模式

工厂方法模式定义了一个用于创建对象的接口,但让子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中进行。

示例代码

// 抽象产品类
interface Product {void use();
}// 具体产品类A
class ConcreteProductA implements Product {@Overridepublic void use() {System.out.println("Using ConcreteProductA");}
}// 具体产品类B
class ConcreteProductB implements Product {@Overridepublic void use() {System.out.println("Using ConcreteProductB");}
}// 抽象工厂类
interface Creator {Product factoryMethod();
}// 具体工厂类A
class ConcreteCreatorA implements Creator {@Overridepublic Product factoryMethod() {return new ConcreteProductA();}
}// 具体工厂类B
class ConcreteCreatorB implements Creator {@Overridepublic Product factoryMethod() {return new ConcreteProductB();}
}// 客户端代码
public class FactoryMethodDemo {public static void main(String[] args) {Creator creatorA = new ConcreteCreatorA();Product productA = creatorA.factoryMethod();productA.use();Creator creatorB = new ConcreteCreatorB();Product productB = creatorB.factoryMethod();productB.use();}
}

2. 单例模式(Singleton Pattern) - 创建型模式

单例模式确保一个类仅有一个实例,并提供一个全局访问点。

示例代码(懒汉式):

public class Singleton {// 私有静态实例,懒加载private static Singleton instance;// 私有构造函数,防止外部实例化private Singleton() {}// 提供一个全局的静态方法,返回唯一实例public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}// 示例方法public void someMethod() {System.out.println("SomeMethod is called");}// 客户端代码public static void main(String[] args) {Singleton singleton = Singleton.getInstance();singleton.someMethod();}
}

3. 观察者模式(Observer Pattern) - 行为型模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

示例代码

import java.util.ArrayList;
import java.util.List;// 抽象主题类
interface Subject {void registerObserver(Observer o);void removeObserver(Observer o);void notifyObservers();
}// 抽象观察者类
interface Observer {void update(String message);
}// 具体主题类
class ConcreteSubject implements Subject {private List<Observer> observers;private String message;public ConcreteSubject() {observers = new ArrayList<>();}@Overridepublic void registerObserver(Observer o) {observers.add(o);}@Overridepublic void removeObserver(Observer o) {observers.remove(o);}@Overridepublic void notifyObservers() {for (Observer observer : observers) {observer.update(message);}}public void setMessage(String message) {this.message = message;notifyObservers();}
}// 具体观察者类
class ConcreteObserver implements Observer {private String name;public ConcreteObserver(String name) {this.name = name;}@Overridepublic void update(String message) {System.out.println(name + " received: " + message);}
}// 客户端代码
public class ObserverDemo {public static void main(String[] args) {ConcreteSubject subject = new ConcreteSubject();Observer observer1 = new ConcreteObserver("Observer1");Observer observer2 = new ConcreteObserver("Observer2");subject.registerObserver(observer1);subject.registerObserver(observer2);subject.setMessage("Hello, Observers!");}
}

这些代码示例展示了Java中设计模式的基本应用。通过设计模式,我们可以编写出更加模块化、可重用和易于维护的代码。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++】C++库:如何链接外部库、静态链接和动态链接,以及如何自建库并使用
  • 这些主流的销售管理系统,能够有效提升客户管理效率!
  • Python范例总结
  • Nginx 限流实战教程和技巧
  • Apache Airflow如何使用
  • 如何在算家云搭建text-generation-webui(文本生成)
  • uniapp中<map>地图怎么实现点位聚合?
  • 【Qwen2-VL】通义多模态新作速读
  • 创建游戏暂停菜单
  • 力扣(leetcode)每日一题 LCR 187 破冰游戏(还是考的约瑟夫环)
  • UWA支持鸿蒙HarmonyOS NEXT
  • 【Spring】条件装配 @ConditionalOnClass @ConditionalOnBean
  • 【Midjourney中文版】智能绘画,高效便捷
  • python日志搜集分析系统
  • 系统架构笔记-3-信息系统基础知识
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Cookie 在前端中的实践
  • rc-form之最单纯情况
  • Redash本地开发环境搭建
  • spring + angular 实现导出excel
  • tensorflow学习笔记3——MNIST应用篇
  • webpack项目中使用grunt监听文件变动自动打包编译
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 来,膜拜下android roadmap,强大的执行力
  • 微服务入门【系列视频课程】
  • 线上 python http server profile 实践
  • 优秀架构师必须掌握的架构思维
  • #1015 : KMP算法
  • #pragma预处理命令
  • (06)金属布线——为半导体注入生命的连接
  • (5)STL算法之复制
  • (Java入门)学生管理系统
  • (SpringBoot)第二章:Spring创建和使用
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (理论篇)httpmoudle和httphandler一览
  • (三)docker:Dockerfile构建容器运行jar包
  • (五)网络优化与超参数选择--九五小庞
  • (杂交版)植物大战僵尸
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转载)Linux 多线程条件变量同步
  • .jks文件(JAVA KeyStore)
  • .Net IE10 _doPostBack 未定义
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .net mvc 获取url中controller和action
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net(C#)中String.Format如何使用
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • @html.ActionLink的几种参数格式
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • @PostConstruct 注解的方法用于资源的初始化
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [1]-基于图搜索的路径规划基础
  • [240727] Qt Creator 14 发布 | AMD 推迟 Ryzen 9000芯片发布