装饰设计模式和例题

简介:

文件复制程序:

将一个文件复制一份出来,实现方法很简单,使用FileInputStream读取文件内容,然后使用FileOutputStream写入另一个文件,利用read方法的返回值作为while循环的条件,进行一边读一边写。

 

代码示例:

c52fe6c2bab188bc0b7574fcb50ed967.png



统计连续的重复字节:

将连续5个以上重复的字节统计一下,并且将重复的数量和所有重复字节的总数量打印出来。

实现这个程序,主要思路是单个字节的读取,每读取一个字节就记录下来,然后和下一次读取的字节进行对比比否相等,相等代表重复。就再用一个count变量记录重复的次数,如果不相等就代表不重复就需要把这个变量归零重新记录。还需要一个total变量来记录每次重复的次数总和,只需要加个判断条件,只要count大于等于5就令total+=count即可。

 

代码示例:

b1bc1e02bc7642ebfc95c4ed42352475.png


运行结果:

f29e6b014f9182ca7c5f364fbffe4feb.png




装饰设计模式:

装饰设计模式,顾名思义就是给某样东西、某个对象进行装饰。装饰设计模式可以利用继承或实现接口的方式,给一个基础的对象增加新的功能,就像一个毛坯房,可以通过装修之后变成漂亮的房子,有点类似于能够进行功能上的叠加。

下面以蛋糕为主题进行一个装饰设计模式的过程:

代码示例:

先使用一个接口定制好方法:

98e194bc72cf1e08dd8ec143770bc050.png



然后写一个最基础的类,在蛋糕里最基础的类就是普通蛋糕了,在这个类里需要实现接口。

代码示例:

ff7eb5faef3f65ccbb13f81b74f6cf94.png



接着就是其他可以以蛋糕这个类为基础扩展的类,例如草莓蛋糕:

代码示例:

b4a9bcac5cf144345b4fbfc592f74716.png



愿意的话可以写任意个这样的类,但是基本规则都是一样:

  代码示例:

1339edec74551d6ab92005fade0cd7f5.png



体系写完后,可以使用测试类测试效果:

  代码示例:

4ad92b9b49876092b46d2d6ef41adfed.png


运行结果:

8ccfcf2af2235c713659c6c4c827e246.png


再增加(装饰)一个对象:

0ff230f3cc409e22605c05c08e1435d7.png


运行结果:

c18b088031f579cb55485bfb5788e027.png


可以增加任意个对象:

787ad5f32694d4530bdc4db1d5149247.png


运行结果:

dec0b714a4b58f6a23e5337e5f78b090.png


也可以只使用基础类对象:

03546f7efcb029f5ca56416f83538b14.png


运行结果:

88e620728806f56100c6b80019b891dd.png



写信的例题:

  也是同样先定义一个接口或者抽象类:

b5fe8b1be9c5882c17f33265abe39e31.png


然后再定义一个基础实现类:

679bd6669b1b660b373847634f5c0d47.png


有些人喜欢在信件上喷点香水,所以可以写一个香水的扩展类:

1847fc589950f673738f34f3f07b7737.png


如果写的是情书,或许还需要一个吻印,那么就可以写一个吻印的扩展类:

b1315ed96fc72bced06729f4ee006a9e.png


既然有吻印,自然得再加上几个爱心桃,来给对方表达爱慕,那么就再写一个爱心的扩展类:

25c3787aceaf2f40c272686d3f713dd0.png


完成后就可以在测试类里进行测试查看效果:

13ff3566d8991880efb23a58821cf0e2.png



运行结果:

813bde370d917577319fc111785b7066.png




本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1976621,如需转载请自行联系原作者

相关文章
|
22天前
|
Java
Java实现打印菱形
Java实现打印菱形
19 1
|
1月前
|
Java
java实现打印菱形
java实现打印菱形
10 0
|
8月前
|
程序员 C语言
初阶函数经典例题(2)
初阶函数经典例题(2)
|
8月前
|
C语言
初阶函数基础例题(1)
初阶函数基础例题(1)
|
6月前
|
算法 Java C++
【洛谷算法题】B2025-输出字符菱形【入门1顺序结构】
【洛谷算法题】B2025-输出字符菱形【入门1顺序结构】
|
8月前
|
编译器
初阶函数递归经典例题(1)
初阶函数递归经典例题(1)
【C】指针——知识点大全(详细,简洁,含例题)(二)
【C】指针——知识点大全(详细,简洁,含例题)
|
10月前
|
存储 编译器
【C】指针——知识点大全(详细,简洁,含例题)(一)
【C】指针——知识点大全(详细,简洁,含例题)
|
11月前
|
存储 机器学习/深度学习 缓存
【C++】设计类题目总结
1、最小栈 题目连接
|
11月前
|
机器学习/深度学习 C++

热门文章

最新文章