甘肃省工程建设信息官方网站34线城市做网站推广
2026/1/21 17:56:28 网站建设 项目流程
甘肃省工程建设信息官方网站,34线城市做网站推广,WordPress邮箱内容修改,网站建站公司费用一#xff0c;初步理解直接举个例子#xff1a;在这个例子中#xff0c;结合以上图片与uml图进行分析不难得出#xff1a;Decorator装饰器包含滚动条与边框#xff0c;是它们的父类即滚动条与边框都为ConcreteDecorator#xff08;具体装饰器#xff09;Component负责将…一初步理解直接举个例子在这个例子中结合以上图片与uml图进行分析不难得出Decorator装饰器包含滚动条与边框是它们的父类即滚动条与边框都为ConcreteDecorator具体装饰器Component负责将装饰器与基础组件统计起来说明每个组件与装饰器该完成什么统一的工作比如这里它们都需要画出来draw所以显然这里的文本框并不属于装饰器而是属于基础组件二看题目Componet是界面组件中的抽象父类其TextBox子类是文本框组件Table子类是表格组件。Decorator是抽象的装饰器父类有两个具体的装饰器ScrollDecorator给Componet画上滚动条简单地在被装饰对象draw()后System.out.print( drawScroll)即可 BorderDecorator给Componet画上边框简单地在被装饰对象draw()后System.out.print( drawBorder);即可 解题思路1.分析谁是ConcreteDecorator具体装饰器谁是ConcreteComponent基础组件2.根据ConcreteDecorator具体装饰器定义装饰器父类Decorator3.根据ConcreteComponent基础组件与Decorator统一组件行为这里是draw得到Component于是画出类图代码附详细注释重点class ScrollDecorator extends Decorator{ private Component component; public ScrollDecorator(Component component){ this.componentcomponent; } public void draw(){ component.draw(); System.out.print( drawScroll); } } class BorderDecorator extends Decorator{ private Component component; public BorderDecorator(Component component){ this.componentcomponent; } public void draw(){ component.draw(); System.out.print( drawBorder); } }对里面的一些代码进行说明装饰器的装饰1.对基础组件进行装饰2.对被装饰过的组件进行继续装饰的行为如装了滚动条还要装边框的情况所以有先画出要装饰的组件情况再加上自己装饰的内容public void draw(){ component.draw(); System.out.print( drawScroll); }其他/** * 抽象组件类Component装饰者模式的顶层抽象 * 定义了所有具体组件如TextBox、Table和装饰者Decorator的统一接口 * 核心作用是规范组件的绘制行为为装饰者包装组件提供统一标准 */ abstract class Component { /** * 抽象绘制方法所有组件和装饰者都必须实现该方法用于执行具体的绘制逻辑 */ abstract void draw(); } /** * 具体组件类文本框TextBox * 继承自抽象组件Component实现了具体的绘制逻辑是被装饰者包装的核心对象 */ class TextBox extends Component { /** * 实现文本框的绘制逻辑 * 输出文本框绘制的标识信息 */ Override void draw() { System.out.print(drawTextBox); } } /** * 具体组件类表格Table * 继承自抽象组件Component实现了具体的表格绘制逻辑是被装饰者包装的核心对象 */ class Table extends Component { /** * 实现表格的绘制逻辑 * 输出表格绘制的标识信息 */ Override void draw() { System.out.print(drawTable); } } /** * 抽象装饰者类Decorator继承自Component是所有具体装饰者的父类 * 核心作用是持有组件对象被装饰者并统一装饰者的行为规范实现对组件的功能扩展 */ abstract class Decorator extends Component { // 持有抽象组件对象用于包装装饰具体组件或其他装饰者支持多层装饰 protected Component component; /** * 装饰者构造方法传入需要被装饰的组件对象 * param component 被装饰的组件可以是具体组件也可以是其他装饰者对象 */ public Decorator(Component component) { this.component component; } } /** * 具体装饰者类边框装饰者BorderDecorator * 继承自抽象装饰者Decorator用于为组件添加“绘制边框”的额外功能 */ class BorderDecorator extends Decorator { /** * 构造方法传入需要添加边框装饰的组件 * param component 被装饰的组件TextBox/Table或其他装饰者 */ public BorderDecorator(Component component) { super(component); // 调用父类Decorator的构造方法初始化被装饰组件 } /** * 重写绘制方法在原有组件绘制逻辑的基础上添加边框绘制的功能 * 这是装饰者模式的核心不修改原有组件逻辑通过包装扩展功能 */ Override void draw() { // 1. 先执行额外的装饰逻辑绘制边框前置扩展 System.out.print(drawBorder-); // 2. 调用被装饰组件的draw方法执行原有核心绘制逻辑 component.draw(); } } /** * 具体装饰者类滚动条装饰者ScrollDecorator * 继承自抽象装饰者Decorator用于为组件添加“绘制滚动条”的额外功能 */ class ScrollDecorator extends Decorator { /** * 构造方法传入需要添加滚动条装饰的组件 * param component 被装饰的组件TextBox/Table或其他装饰者 */ public ScrollDecorator(Component component) { super(component); // 调用父类Decorator的构造方法初始化被装饰组件 } /** * 重写绘制方法在原有组件或已装饰组件绘制逻辑的基础上添加滚动条绘制功能 * 支持多层装饰嵌套如先给Table加边框再给带边框的Table加滚动条 */ Override void draw() { // 1. 先执行额外的装饰逻辑绘制滚动条前置扩展 System.out.print(drawScroll-); // 2. 调用被装饰组件的draw方法执行其原有逻辑可能是核心组件逻辑或其他装饰者逻辑 component.draw(); } } /** * 主类程序入口用于测试装饰者模式的使用 * 演示如何通过装饰者为具体组件添加多层额外功能 */ public class Main{ /** * 主方法程序执行入口 * param args 命令行参数本程序未使用 */ public static void main(String[] args){ // 1. 多层装饰先给Table添加边框装饰再给带边框的Table添加滚动条装饰 // 最终得到一个“带滚动条带边框”的Table组件 Component tablenew ScrollDecorator(new BorderDecorator(new Table())); // 2. 单层装饰给TextBox添加边框装饰得到一个“带边框”的TextBox组件 Component textnew BorderDecorator(new TextBox()); // 3. 调用装饰后的Table组件的绘制方法会依次执行滚动条→边框→Table的绘制逻辑 table.draw(); // 换行用于分隔两个组件的输出结果提升可读性 System.out.println(); // 4. 调用装饰后的TextBox组件的绘制方法会依次执行边框→TextBox的绘制逻辑 text.draw(); } }测试/** * 主类程序入口用于测试装饰者模式的使用 * 演示如何通过装饰者为具体组件添加多层额外功能 */ public class Main{ /** * 主方法程序执行入口 * param args 命令行参数本程序未使用 */ public static void main(String[] args){ // 1. 多层装饰先给Table添加边框装饰再给带边框的Table添加滚动条装饰 // 最终得到一个“带滚动条带边框”的Table组件 Component tablenew ScrollDecorator(new BorderDecorator(new Table())); // 2. 单层装饰给TextBox添加边框装饰得到一个“带边框”的TextBox组件 Component textnew BorderDecorator(new TextBox()); // 3. 调用装饰后的Table组件的绘制方法会依次执行滚动条→边框→Table的绘制逻辑 table.draw(); // 换行用于分隔两个组件的输出结果提升可读性 System.out.println(); // 4. 调用装饰后的TextBox组件的绘制方法会依次执行边框→TextBox的绘制逻辑 text.draw(); } }三练习Java IO 流的设计使用了装饰器设计模式例如字符流输入流抽象类Reader 中有方法 public abstract int read() 读取一个字符 StringRead是具体的字符输入流实现read()方法从字符串中读取一个字符。FilterReader是抽象的装饰器类。请从FilterReader 类继承实现 LowerCaseStringReader 把输入字符流中大写字母都转换为小写。只需要 补充完成 LowerCaseStringReader 类且仅需提交 LowerCaseStringReader 类即可题目给出class LowerCaseStringReader extends FilterReader { Reader in; protected LowerCaseStringReader(Reader in) { super(in); this.inin; } Override public int read() throws IOException { /* 请补充代码 */ } } public class Main{ public static void main(String[] args) throws IOException { LowerCaseStringReader rnew LowerCaseStringReader(new StringReader(Design Pattern)); int c; while( (cr.read())0){ System.out.print((char)c); } } }装饰器模式核心角色本题对应的 Java IO 类 / 实现角色说明Component抽象组件Reader抽象类所有字符输入流基础组件 装饰者的顶层统一接口定义了核心方法read()读取一个字符规范了所有字符输入流的行为标准ConcreteComponent具体基础组件StringReader类继承自Reader是被装饰的核心对象无任何额外功能扩展仅实现基础业务逻辑负责从字符串中读取原始字符不做任何转换处理Decorator抽象装饰者FilterReader类1. 必须继承自抽象组件Reader保证和基础组件具有统一接口外部使用时无需区分 “基础组件” 和 “装饰者”2. 内部持有Reader类型的引用可指向基础组件或其他装饰者支持多层装饰3. 本身是抽象类不实现具体的扩展逻辑仅作为所有具体装饰者的父类ConcreteDecorator具体装饰者LowerCaseStringReader类本题需要实现的类1. 继承自抽象装饰者FilterReader2. 持有被装饰的Reader对象通过构造方法传入3. 重写Reader的核心方法read()在原有基础组件StringReader的read()方法基础上添加 “大写字母转小写” 的扩展功能这是装饰器模式的核心实现需要的题目代码如下public int read() throws IOException { // 1. 先调用被装饰对象in本质是StringReader的read()方法获取原始字符 int originalChar in.read(); // 2. 判断字符是否有效Reader的read()方法返回-1表示读取到流末尾 if (originalChar -1) { return -1; // 到达流末尾直接返回-1 } // 3. 将原始字符转为char类型判断是否为大写字母 char ch (char) originalChar; if (ch A ch Z) { // 大写字母转为小写ASCII码中大写字母32对应小写字母 return Character.toLowerCase(ch); // 等价于return (char) (ch 32); } // 4. 非大写字母直接返回原始字符 return originalChar; }四总结装饰器模式Decorator Pattern允许向一个现有的对象添加新的功能同时又不改变其结构。这种类型的设计模式属于结构型模式它是作为现有的类的一个包装。装饰器模式通过将对象包装在装饰器类中以便动态地修改其行为。这种模式创建了一个装饰类用来包装原有的类并在保持类方法签名完整性的前提下提供了额外的功能。设计模式系列持续更新欢迎关注博主~希望对大家有用祝您开心~(o゜▽゜)o☆有问题欢迎交流俺会改的✊

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询