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

Java中的主要设计模式

Java中的设计模式是一套被广泛认可的解决特定问题的解决方案。它们分为三大类:创建型模式、结构型模式和行为型模式。以下是一些常见的设计模式及其简要介绍和代码实现示例:

创建型模式

  1. 单例模式(Singleton): 确保一个类只有一个实例,并提供一个全局访问点。

    public class Singleton {private static Singleton instance;private Singleton() {}public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
    }
  2. 工厂方法模式(Factory Method): 定义一个用于创建对象的接口,让子类决定实例化哪一个类。

    interface Product {void use();
    }class ConcreteProduct implements Product {public void use() {System.out.println("Using ConcreteProduct");}
    }abstract class Creator {abstract Product factoryMethod();
    }class ConcreteCreator extends Creator {public Product factoryMethod() {return new ConcreteProduct();}
    }
  3. 建造者模式(Builder): 用于创建一个复杂对象,同时允许用户只通过指定复杂对象的类型和内容就能构建它们。

    class Product {private String part1;private String part2;public static class Builder {private String part1;private String part2;public Builder setPart1(String part1) {this.part1 = part1;return this;}public Builder setPart2(String part2) {this.part2 = part2;return this;}public Product build() {return new Product(this.part1, this.part2);}}private Product(String part1, String part2) {this.part1 = part1;this.part2 = part2;}
    }

结构型模式

  1. 适配器模式(Adapter): 允许对象间的接口不兼容问题通过一个“适配器”来解决。

    interface Target {void request();
    }class Adaptee {public void specificRequest() {System.out.println("Specific Request");}
    }class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee = adaptee;}public void request() {adaptee.specificRequest();}
    }
  2. 装饰器模式(Decorator): 动态地给一个对象添加额外的职责。

    interface Component {void operate();
    }class ConcreteComponent implements Component {public void operate() {System.out.println("ConcreteComponent");}
    }abstract class Decorator implements Component {protected Component component;public Decorator(Component component) {this.component = component;}public void operate() {component.operate();}
    }class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component component) {super(component);}public void operate() {super.operate();// Add additional behaviorSystem.out.println("ConcreteDecoratorA");}
    }

行为型模式

  1. 策略模式(Strategy): 定义一系列算法,把它们一个个封装起来,并使它们可互换。

    interface Strategy {void execute();
    }class ConcreteStrategyA implements Strategy {public void execute() {System.out.println("Strategy A");}
    }class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy = strategy;}public void executeStrategy() {strategy.execute();}
    }
  2. 观察者模式(Observer): 对象间的一对多依赖关系,当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。

    interface Observer {void update();
    }class ConcreteObserver implements Observer {public void update() {System.out.println("Observer updated");}
    }class Subject {private List<Observer> observers = new ArrayList<>();public void attach(Observer observer) {observers.add(observer);}public void notifyObservers() {for (Observer observer : observers) {observer.update();}}
    }

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ubuntu18.04下安装nvidia3090显卡驱动
  • 数据结构----栈
  • C语言指针详解-上
  • (七)Activiti-modeler中文支持
  • 『Z-Workshop』 The Graph workshop mini hackathon活动
  • IBERT 眼图机制
  • 使用Poi-tl对word模板生成动态报告
  • 利用 Python 的包管理和动态属性获取(`__init__.py` 文件和 `getattr` 函数)特性来实现工厂方法模式
  • RHEL8 配置epel源
  • 深入探讨C语言中的高级指针操作
  • 生产环境中MapReduce的最佳实践
  • 微信小程序在不同移动设备上的差异导致原因
  • Startup-SBOM:一款针对RPM和APT数据库的逆向安全工具
  • Jenkins使用Publish Over SSH插件远程部署程序到阿里云服务器
  • vue3+ts+vite+pinia+element-plus搭建一个项目
  • ES6指北【2】—— 箭头函数
  • ➹使用webpack配置多页面应用(MPA)
  • 30天自制操作系统-2
  • CODING 缺陷管理功能正式开始公测
  • Debian下无root权限使用Python访问Oracle
  • Java基本数据类型之Number
  • js递归,无限分级树形折叠菜单
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Terraform入门 - 3. 变更基础设施
  • text-decoration与color属性
  • 机器学习学习笔记一
  • 今年的LC3大会没了?
  • 前端技术周刊 2019-01-14:客户端存储
  • 数据仓库的几种建模方法
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • Nginx实现动静分离
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • # include “ “ 和 # include < >两者的区别
  • # Redis 入门到精通(一)数据类型(4)
  • #NOIP 2014#Day.2 T3 解方程
  • $(function(){})与(function($){....})(jQuery)的区别
  • (02)vite环境变量配置
  • (1)(1.13) SiK无线电高级配置(五)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (力扣题库)跳跃游戏II(c++)
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)大道至简,职场上做人做事做管理
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • @angular/cli项目构建--http(2)
  • @Autowired自动装配
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • []常用AT命令解释()
  • [Android学习笔记]ScrollView的使用
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [C\C++]读入优化【技巧】
  • [C++]高精度 bign (重载运算符版本)
  • [C++]拼图游戏