装饰设计模式和例题

文件复制程序:

将一个文件复制一份出来,实现方法很简单,使用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,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql操作手册我_MySQL使用指南一

我将MySQL常用指令整理出来分享给大家。1. 列出所有数据库mysql> show databases;2. 创建数据库mysql> create databases MyStorage;3. 打开数据库mysql> use MyStorage;4. 创建表mysql> create table Storage-> (-> id int,-> name varchar(50),-> pr…

谷歌地图将很快显示电动汽车充电站

If you’re out on the road in the future and find your electric vehicle is in dire need of a charge, you’ll soon be able to look to Google Maps for help finding a charging station. 如果您将来出门在外,并且发现您的电动汽车急需充电,那么…

JS4

1. js的本质就是处理数据。数据来自于后台的数据库。 所以变量就起到一个临时存储数据的作用。 ECMAScript制定了js的数据类型。 数据类型有哪些? 字符串 String数字 Number布尔 BooleanNull 空Undefined Object 对象Array 数组 json function …

松弛变量可以为负吗_如何为松弛安装(非官方)暗模式

松弛变量可以为负吗Slack still doesn’t have a dark mode. They have dark themes, but those only let you customize the sidebar colors, leaving the main window white. With the release of system-wide dark modes on macOS Mojave and Windows 10, Slack feels very …

如何在Mac上设置FaceTime

FaceTime is Apple’s built-in video and audio calling app. It pairs with your iPhone and allows you to make phone calls on macOS. FaceTime是Apple的内置视频和音频通话应用程序。 它可以与iPhone配对使用,并允许您在macOS上拨打电话。 You don’t need an…

在Ubuntu 11.10中将窗口按钮移回右侧

As of Ubuntu 10.04, the minimize, maximize, and close buttons on all windows were moved to the left side and the system menu was removed. Prior to version 11.10, you could use several methods to restore the original button arrangement. 从Ubuntu 10.04开始&a…

如何在Windows 10上使用触摸板手势

If you’ve used a touchpad in Windows 10, you’re no doubt aware of the basic single-finger tapping and two-finger scrolling gestures. Windows 10 also packs in some additional gestures you might not have tried. 如果您在Windows 10中使用了触摸板,那…

相机模拟光圈_我的相机应该使用什么光圈?

相机模拟光圈Aperture, along with shutter speed and ISO, is one of the three most important settings you control when you take a photo. It affects both the amount of light that hits your camera sensor and the depth of field of your images. Let’s look at ho…

2018-2019-1 20165234 《信息安全系统设计基础》第四周学习总结

一、学习目标 了解ISA抽象的作用 掌握ISA,并能举一反三学习其他体系结构 了解流水线和实现方式二、学习内容 Y86-64指令 movq指令 irmovq rrmovq mrmovq rmmovq四个整数操指令 addq,subq,andq,xorq只对寄存器数据进行操作7个跳转指令 cmovle cmovl cmove cmovne cmo…

Python之钉钉机器人推送天气预报

通过Python脚本结合钉钉机器人,定时向钉钉群推送天气预报 #!/usr/bin/python # -*- coding: utf-8 -*- # Author: aikergdedu.ml # My blog http://m51cto.51cto.blog.com import requests import re import urllib2 import json import sys import osheaders {Co…

google +按钮_如何禁用或改善Google的Google+集成

google 按钮If you’ve used Google lately, you’ve probably seen Google taking over Google’s search results. You don’t have to put up with it — you can disable the integration, show better social-networking pages or hide those pesky Google notifications.…

java 集合读写同步_JAVA多线程学习十六 - 同步集合类的应用

1.引言在多线程的环境中,如果想要使用容器类,就需要注意所使用的容器类是否是线程安全的。在最早开始,人们一般都在使用同步容器(Vector,HashTable),其基本的原理,就是针对容器的每一个操作,都添加synchronized来进行同…

ubuntu自定义菜单_如何自定义Ubuntu的每日消息

ubuntu自定义菜单Ubuntu displays an informative message, known as the message of the day, when a user logs in at the terminal. The MOTD is fully customizable — you can add your own text and other dynamic data. 当用户在终端上登录时,Ubuntu将显示信…

火狐web开发清楚缓存_如何使用Firefox的Web开发工具

火狐web开发清楚缓存Firefox’s Web Developer menu contains tools for inspecting pages, executing arbitrary JavaScript code, and viewing HTTP requests and other messages. Firefox 10 added an all-new Inspector tool and updated Scratchpad. Firefox的Web Develop…

Java基类共同属性设置_多选择基类的访问属性-Java初学笔记

多选择基类的访问属性你现在知道在定义类的访间属性时可用的选择项,你希望使用这些类定义子类。你知道在类继承上这些属性所具有的效果,但是你如何决定到底应该使用哪一个呢?这里没有死板和现成的规则,你选择的访问属性取决于在将来你想用类…

IT:如何在Windows Server 2008 R2上安装Hyper-V虚拟化

Windows Server 2008 R2 and later releases of the product ship with a virtualization platform called Hyper-V, which works quite well since it’s built into Windows. Today we’re going to show you how to install it. Windows Server 2008 R2和更高版本的产品附带…

FineReport单行与数据库交互的方法

1. 问题描述 我们在做一张报表填报的时候经常会遇到需要在一行进行添加动作,将该行数据直接与数据库交互,执行存储过程过程。我们可以通过每一行增加帆软“插入”按钮实现插入动作,并且在控件事件中增加和数据库的交互,但当事件…

java cas volatile_每日一个知识点:Volatile 和 CAS 的弊端之总线风暴

每日一个知识点系列的目的是针对某一个知识点进行概括性总结,可在一分钟内完成知识点的阅读理解,此处不涉及详细的原理性解读。一、什么是总线风暴总线风暴,听着真是一个帅气的词语,但如果发生在你的系统上那就不是很美丽了&#…

SqlServer之代码块相关

转载必需注明出处:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/sqlserver-codeblock/ 一、go语句 Go语句是SqlServer中用来表示当前代码块结束提交并确认结果的语句。 Go语句不能和其他Sql命令卸载同一行上! 定义的局部变量作用域局限在定义它的代码…

010 使用list和tuple

list Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。 比如,列出班里所有同学的名字,就可以用一个list表示: >>> classmates [Michael, Bob, Tracy] >>&g…