java基础47 装饰着模式设计
1、装饰者模式
增强一个类的功能,而且还可以让这些装饰类相互装饰
2、装饰者设计模式的步骤
1.在装饰类的内部维护一个被装饰类的引用
2.让装饰者有一个共同的父类或者父接口
3、实例
1 package com.dhb.file; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.io.Reader; 8 9 /** 10 * @author DSHORE / 2018-7-11 11 * 12 */ 13 /* 14 * 装饰者模式:增强一个类的功能,而且还可以让这些装饰类相互装饰 15 * 16 *装饰者设计模式的步骤: 17 * 1.在装饰类的内部维护一个被装饰类的引用 18 * 2.让装饰者有一个共同的父类或者父接口 19 * 20 * 需求1:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有行号. 21 * 需求2:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有分号. 22 * 需求3:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有双引号. 23 * 需求4:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有行号+分号. 24 * 需求5:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有分号+双引号. 25 * 需求6:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有双引号双引号+行号. 26 * 需求7:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有行号+分号+双引号. 27 * 28 * 注:如果要实现需求4到7,用装饰者模式对应的调用下面的三个方法即可 29 * */ 30 31 //带双引号 32 class BufferedQuto3 extends BufferedReader{//2.让装饰者有一个共同的父类或者父接口 BufferedReader 33 public BufferedQuto3(Reader in) {//new BufferedSemi3() 34 super(in); 35 } 36 @Override 37 public String readLine() throws IOException { 38 String line=super.readLine(); 39 if(line==null){ 40 return null; 41 } 42 line="\""+line+"\""; 43 return line; 44 } 45 46 } 47 //带分号 48 class BufferedSemi3 extends BufferedReader{//2.让装饰者有一个共同的父类或者父接口 BufferedReader 49 //1.在装饰类的内部维护一个被装饰类的引用 (注:如果想要两个或多个类相互装饰,那么就在对应的类上也写上第一步) 50 BufferedReader bufferedReader; 51 public BufferedSemi3(BufferedReader bufferedReader) {//=New BufferedLineNum3() 52 super(bufferedReader); 53 this.bufferedReader=bufferedReader; 54 } 55 @Override 56 public String readLine() throws IOException { 57 String line=bufferedReader.readLine();//super 改成了 bufferedReader,因为需要用到带行号的方法;如果还是用super的话,那么调用的是父类BufferedReader,而父类没有带行号的方法。 58 if(line==null){ 59 return null; 60 } 61 line=line+";"; 62 return line; 63 } 64 } 65 //带行号 66 class BufferedLineNum3 extends BufferedReader{//2.让装饰者有一个共同的父类或者父接口 BufferedReader 67 int count=1; 68 public BufferedLineNum3(Reader in) { 69 super(in); 70 } 71 @Override 72 public String readLine() throws IOException { 73 String line=super.readLine(); 74 if(line==null){ 75 return null; 76 } 77 line=count+" "+line; 78 count++; 79 return line; 80 } 81 } 82 //主方法 83 public class Demo19 { 84 public static void main(String[] args) throws IOException { 85 File file=new File("F:\\MyJavaCode\\Demo20.java"); 86 FileReader fr=new FileReader(file); 87 //BufferedReader br=new BufferedReader(fr); 88 //带行号的缓冲输字符入流 89 BufferedLineNum3 bln=new BufferedLineNum3(fr); 90 //带分号的缓冲输入字符流 91 BufferedSemi3 bs=new BufferedSemi3(bln); 92 //带双引号的缓冲输入字符流 93 BufferedQuto3 bq=new BufferedQuto3(fr); 94 String line=null; 95 while((line=bs.readLine())!=null){ 96 System.out.println(line); 97 } 98 bs.close(); 99 } 100 }
运行结果图
附录
释:下面的例子没有用到装饰着模式,如果要实现需求4到7的话,那么需要再写一个专门的类,比较繁杂。或者在主方法里面多些几个while循环。
1 package com.dhb.file; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.io.Reader; 8 9 /** 10 * @author DSHORE / 2018-7-11 11 * 12 */ 13 /* 14 * 需求1:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有行号. 15 * 需求2:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有分号. 16 * 需求3:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有双引号. 17 * 需求4:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有行号+分号. 18 * 需求5:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有分号+双引号. 19 * 需求6:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有双引号双引号+行号. 20 * 需求7:编写一个类拓展BufferedRead的功能,增强readLine方法返回字符串带有行号+分号+双引号. 21 * */ 22 23 //带双引号 24 class BufferedQuto extends BufferedReader{ 25 public BufferedQuto(Reader in) {//new BufferedSemi() 26 super(in); 27 } 28 @Override 29 public String readLine() throws IOException { 30 String line=super.readLine(); 31 if(line==null){ 32 return null; 33 } 34 line="\""+line+"\""; 35 return line; 36 } 37 } 38 //带分号 39 class BufferedSemi extends BufferedReader{ 40 41 public BufferedSemi(Reader in) {//=New BufferedLineNum() 42 super(in); 43 } 44 @Override 45 public String readLine() throws IOException { 46 String line=super.readLine(); 47 if(line==null){ 48 return null; 49 } 50 line=line+";"; 51 return line; 52 } 53 } 54 //带行号 55 class BufferedLineNum extends BufferedReader{ 56 int count=1; 57 public BufferedLineNum(Reader in) { 58 super(in); 59 } 60 @Override 61 public String readLine() throws IOException { 62 String line=super.readLine(); 63 if(line==null){ 64 return null; 65 } 66 line=count+" "+line; 67 count++; 68 return line; 69 } 70 } 71 //主方法 72 public class Demo20 { 73 public static void main(String[] args) throws IOException { 74 File file=new File("F:\\MyJavaCode\\Demo20.java"); 75 FileReader fr=new FileReader(file); 76 //BufferedReader br=new BufferedReader(fr); 77 //带行号的缓冲输字符入流 78 BufferedLineNum bln=new BufferedLineNum(fr); 79 //带分号的缓冲输入字符流 80 BufferedSemi bs=new BufferedSemi(fr); 81 //带双引号的缓冲输入字符流 82 BufferedQuto bq=new BufferedQuto(fr); 83 String line=null; 84 while((line=bq.readLine())!=null){ 85 System.out.println(line); 86 } 87 bln.close(); 88 } 89 }
运行结果图
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/9295335.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
转载于:https://www.cnblogs.com/dshore123/p/9295335.html
java基础47 装饰着模式设计相关推荐
- Java 设计模式之装饰者模式
一.了解装饰者模式 1.1 什么是装饰者模式 装饰者模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰者来包裹真实的对象. 所以装饰者可以动 ...
- java中的装饰者模式[63]
java中的装饰者模式[63] 文章目录 java中的装饰者模式[63] 一.什么是装饰者模式? 二.装饰者模式要点 三.代码演示 四.小结 一.什么是装饰者模式? **1.意图:**动态的给一个对象 ...
- Java设计模式(装饰者模式-组合模式-外观模式-享元模式)
Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...
- java装饰模式_Java装饰者模式实例详解
本文实例讲述了Java装饰者模式.分享给大家供大家参考,具体如下: 装饰模式 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 装 ...
- Java 8的装饰器模式
在最近的一篇文章中,我描述了装饰器模式如何拯救了我的一天. 我给出了一个小代码段,其中包含创建装饰器的最简单方法,但承诺Java 8会有更好的方法. 这里是: 用Java 8装饰 HyperlinkL ...
- Java常用设计模式————装饰者模式
引言 装饰者模式,又叫装饰器模式.它可以动态的将新功能附加到对象上.在对象功能扩展方面,它比继承更灵活,同时装饰者模式也体现了OCP原则. 在客户端调用使用了装饰者模式的对象时,就好像在使用构造器层层 ...
- java设计模式之 装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构. 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装 ...
- Java设计模式之三--装饰者模式
转载出处:http://blog.csdn.NET/lmj623565791/article/details/24269409 今天继续设计模式之旅,给大家带来装饰者模式,国际惯例,先看定义. 装饰者 ...
- Java 设计模式之装饰器模式
装饰器模式用于给原有对象增加新功能的场景, 拿食物冰淇淋,香草巧克力作为例子,给冰淇淋加香草,或者加巧克力,或者加香草和巧克力. 首先定义一个食物接口: /*** 装饰类和被装饰类共同继承的抽象类* ...
- java设计模式之装饰者模式
为什么80%的码农都做不了架构师?>>> 定义:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 特点: ...
最新文章
- 充电类型一二次检测过程及充电类型
- 机器学习系列(8)_读《Nature》论文,看AlphaGo养成
- ruby学习笔记(2)-chomp,chop的区别
- 【STM32】ESP8266模块简介
- 大话设计模式—外观模式
- 批量改名_手把手教你用Python批量给图片添加水印 | 知了干货分享
- output在delete中的应用
- C语言程序的开发过程
- 《遥感原理与应用》孙家抦版知识点总结(含简答题、论述题)——第八章
- 游戏安全02:手游外挂简单分类和实现原理介绍
- 美国大学计算机信息技术专业排名,新鲜出炉 2019年USNews美国大学信息技术管理专业排名榜单!...
- c语言坐标反算方位角函数,反三角函数/简易正反算or方位角转度分秒
- vue-seamless-scroll 无缝滚动 使用方法
- python字典程序题_Python练习:字典
- python画素描画_基于python实现把图片转换成素描
- 红外循迹TCRT5000 舵机SG90
- 画思维导图的三招十八式
- bigemap软件功能
- 如何注册安全邮箱?- 企业电子邮件域名。
- 微社区项目开发笔记(后端篇)