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

软件设计模式-外观模式

  • 外观模式
    • 意图:为子系统中的一组接口提供一个一致的界面。它定义了一个高层接口,使得这一子系统更加容易使用。
    • 例子:编译器提供简单的compile()接口,背后隐藏了词法分析、语法分析、语义分析、代码生成等复杂步骤。
import java.util.Arrays;
import java.util.List;// 子系统1:词法分析器
class Lexer {public List<String> tokenize(String sourceCode) {System.out.println("词法分析:将源代码分割成token序列");// 简化的token化过程String[] tokens = sourceCode.split("\\s+");return Arrays.asList(tokens);}
}// 子系统2:语法分析器
class Parser {public void parse(List<String> tokens) {System.out.println("语法分析:检查token序列是否符合语法规则");// 简化的语法分析System.out.println("生成抽象语法树(AST)");}
}// 子系统3:语义分析器
class SemanticAnalyzer {public void analyze() {System.out.println("语义分析:检查类型、作用域等语义规则");// 简化的语义分析System.out.println("语义分析完成,未发现错误");}
}// 子系统4:中间代码生成器
class IntermediateCodeGenerator {public void generate() {System.out.println("生成中间代码:将AST转换为中间表示");// 简化的中间代码生成System.out.println("生成三地址码或字节码");}
}// 子系统5:代码优化器
class CodeOptimizer {public void optimize() {System.out.println("代码优化:对中间代码进行优化");// 简化的优化过程System.out.println("完成常量传播、死代码消除等优化");}
}// 子系统6:目标代码生成器
class CodeGenerator {public void generate() {System.out.println("生成目标代码:将优化后的中间代码转换为目标机器代码");// 简化的代码生成System.out.println("生成x86汇编代码或JVM字节码");}
}// 外观类:编译器 - 提供简化的compile接口
class Compiler {private Lexer lexer;private Parser parser;private SemanticAnalyzer semanticAnalyzer;private IntermediateCodeGenerator intermediateCodeGenerator;private CodeOptimizer codeOptimizer;private CodeGenerator codeGenerator;public Compiler() {this.lexer = new Lexer();this.parser = new Parser();this.semanticAnalyzer = new SemanticAnalyzer();this.intermediateCodeGenerator = new IntermediateCodeGenerator();this.codeOptimizer = new CodeOptimizer();this.codeGenerator = new CodeGenerator();}// 高层接口:隐藏了复杂的编译过程public void compile(String sourceCode) {System.out.println("开始编译源代码...\n");// 步骤1:词法分析List<String> tokens = lexer.tokenize(sourceCode);System.out.println("Token序列: " + tokens + "\n");// 步骤2:语法分析parser.parse(tokens);System.out.println();// 步骤3:语义分析semanticAnalyzer.analyze();System.out.println();// 步骤4:中间代码生成intermediateCodeGenerator.generate();System.out.println();// 步骤5:代码优化codeOptimizer.optimize();System.out.println();// 步骤6:目标代码生成codeGenerator.generate();System.out.println("\n编译完成!");}// 可选:提供更细粒度的控制方法public void compileToIntermediateCode(String sourceCode) {System.out.println("编译到中间代码...");List<String> tokens = lexer.tokenize(sourceCode);parser.parse(tokens);semanticAnalyzer.analyze();intermediateCodeGenerator.generate();System.out.println("中间代码生成完成!");}
}// 客户端代码
public class FacadePatternDemo {public static void main(String[] args) {// 创建编译器外观Compiler compiler = new Compiler();// 简单的源代码示例String sourceCode = "public class Hello { public static void main(String[] args) { System.out.println(\"Hello World\"); } }";System.out.println("源代码:");System.out.println(sourceCode + "\n");// 客户端只需要调用简单的compile方法,不需要了解内部复杂过程compiler.compile(sourceCode);System.out.println("\n" + "=".repeat(50) + "\n");// 也可以选择只编译到中间代码compiler.compileToIntermediateCode(sourceCode);}
}

http://www.dtcms.com/a/605541.html

相关文章:

  • 谷歌推“Cameyo”方案,助力企业从Win系统转型ChromeOS
  • 论文阅读——CenterNet
  • 石家庄网站建设网站湖南网站备案
  • 请人做网站 说我要求多怎么用polylang做网站
  • 易缴缴:注册资金实缴领域的专业领航者
  • DuckDB适合做什么工作?
  • Java 大视界 -- Java 大数据在智能物流仓储货位优化与库存周转率提升中的应用实战
  • 感知机原理及C++代码实现:AI神经网络入门
  • kanass实战教程系列(5) - 开发团队如何通过kanass有效管控开发任务
  • 建网站如何收费wordpress 论坛app
  • 返利网站做鹊桥推广中国建设银行购物网站
  • ADI推出基于VS Code的IDE开发环境一条龙软件CodeFusion Studio V2.0发布,AI端到端,图形化配置和ELF可视化
  • Prompt提示词工程概述
  • List vs Set:深入剖析Java两大集合的核心区别与实战应用
  • 抖音综合智能营销截流系统:基于 AI 算法的精准获客解决方案
  • 基于多源数据融合与机器学习算法的MATLAB小麦产量预估系统
  • MCP之Prompt提示词工程
  • 11个免费网站空间免费做淘宝客网站
  • 【高级机器学习】6. 稀疏编码与正则化
  • 23.Linux硬盘分区管理
  • 衡水做网站服务商网站建设进度表模板下载
  • 闲置物品平台开发实践:从需求分析到系统架构设计
  • Substance 3D 材质流:AI 快速生成与程序化精修
  • 全球动荡下的金融科技突围:TRS收益互换与场外个股期权系统架构全景解析
  • 软考 系统架构设计师历年真题集萃(201)—— 2025年11月系统架构设计师真题4
  • 网站开发调研问卷深圳龙华区房价
  • 【超详细】C#自定义工具类-ReflectionHelper反射助手类
  • eventfd 初认识Reactor/多线程服务器的关键唤醒机制
  • 接口测试“零基础通关“:Postman从入门到自动化测试实战指南
  • 成都网站优化多少钱苏州网络营销外包团队