今天继续学习一种叫做装饰器模式的设计模式。
当相对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有功能,提供加强功能。自定义的类称为装饰类
装饰类通常通过构造器接收被装饰的对象,并基于被装饰对象的功能,提供更强的功能
简单点说,就是这种模式是将已有对象的功能增强,并且以原对象已有的功能方法制作增强方法。好像越说越复杂了!!
比如,我们知道系统内置的BufferedReader类,是一个带缓冲的输入流,并且可以包装其他的节点流 ,它提供了一个readLine()方法,去提高效率,其实Reader是自带缓冲区的,默认是1024*8,即8192byte,而且不能改变,当多读一个字节时,缓冲区就会自动关闭,而BuffferedReader它提供的缓冲区是可以自定义的。
看代码吧:
自定义一个和BufferedReader功能一样的类:
class MyBufferedReader{
private Reader r;
public MyBufferedReader(Reader r){
this.r = r;
}
public String readLine()throws Exception{
StringBuffer sbr = new StringBuffer();
int ch ;
while(true){
ch = r.read();
if(ch == '\n') break;
if(ch == '\r') continue;
if(ch == -1) break;
sbr.append((char)ch);
}
return sb.length() == 0 ? null : sb.toString();
}
public void close() throws Exception{
r.close();
}
}
public class Test{
public static void main(String args[]){
try{
Reader in = new FileReader("E:/a.txt");
MyBufferedReader mbr = new MyBufferedReader(in);
try{
String line;
while((line=mbr.readLine()) != null){
System.out.println(line);
}
}finally{
mbr.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
这里要提一下,main方法里try-catch-finally的写法:
更合理写法:
public class Test{
public static void main(String[] args){
try{
Reader r = new FileReader("E:/a.txt");
try{
}finally{
}
}catch(Exception e){
e.printStackTrace();
}
}
}
再看下面的写法:
较不合理写法:
public class Test{
public static void main(String[] args){
try{
Reader r = new FileReader("E:/a.txt");
}catch(Exception e){
e.printStackTrace();
}finally{
}
}
}
先写到这里,水平有限,多多指教。
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
在《设计模式浅谈24种》中,主要讨论了24种经典的GOF设计模式,这些模式被分为三大类:创建型、结构型和行为型。 创建型模式主要关注对象的创建,包括以下几个核心模式: 1. **Abstract Factory**(抽象工厂)模式...
Java 设计模式系列 - 装饰器模式 Java 设计模式系列 - 装饰器模式是 Java 设计模式系列中的一种重要模式,它主要用于对目标方法进行增强,提供新的功能或者额外的功能。装饰器模式的主要特点是涉及的是单方,目标...
装饰器模式则通过继承并添加新的行为来扩展已有类的功能。 **总结** 理解并运用UML设计模式是提升软件开发效率和质量的关键。通过学习和实践这些模式,开发者可以更好地理解和重构复杂系统,同时提高代码的可读性...
本篇将深入探讨12种核心的设计模式,它们是:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、桥接模式、组合模式、享元模式和观察者模式。 1. **单例模式**:确保一...
- 构造器模式(原型模式):通过复制已有对象来创建新对象。 2. 结构型设计模式: - 适配器模式:将两个不兼容的接口转换为可以互相操作的接口。 - 桥接模式:将抽象部分与实现部分分离,使它们可以独立变化。 ...
在Python编程中,装饰器是一种非常有用的设计模式,用于在不修改函数定义的情况下增加函数的功能。装饰器通过将原函数包裹在一个新的函数中来实现增强功能,这样的操作被称为“装饰”。然而,在某些情况下,我们可能...
第三学期,学生进一步深入学习汽车专业知识,如汽车电子技术、汽车自动变速器等,同时接触汽车销售和服务管理。第四学期,通过汽车电控技术、汽车维修实战等课程,提升学生的实际操作能力和汽车服务技能。第五学期,...
6. **装饰器模式**: 装饰器模式动态地给对象添加额外的职责,允许扩展对象的功能而不影响其结构。在C#中,可以利用接口和继承来实现装饰器。 7. **代理模式**: 代理模式为其他对象提供一种代理以控制对这个对象的...
* 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。 在Java中,代理模式可以使用接口和实现类来实现。例如,可以创建一个Image接口和实现了Image接口的实体类RealImage,然后创建一个代理...
4. **装饰器模式**:动态地给一个对象添加一些额外的职责,装饰者和被装饰对象有相同的接口,可以无限制地装饰。书中可能展示如何通过继承和组合来实现装饰器。 5. **代理模式**:为其他对象提供一种代理以控制对这...
装饰器模式就像是在照片背后写上一段感人的话再送给MM作为礼物。这种模式允许你在不改变对象原有结构的前提下,动态地给对象添加新的功能。例如,在原有的照片基础上增加一些额外的信息,而无需改变照片本身的属性。...
《浅谈五星级酒店电气设计》 五星级酒店作为高端住宿服务的代表,其电气设计不仅要满足基本的功能需求,还需考虑到舒适性、安全性、节能性和智能化等多个方面。本文将深入探讨五星级酒店电气设计的关键要素,旨在为...
在Python3中,我们可以使用`abstractmethod`装饰器和`ABCMeta`元类来创建接口类。 一、接口类的定义与作用 接口类的作用在于规定子类必须实现哪些方法,以满足特定的协议或标准。它自身不包含任何实现,只定义了...
本文以“浅谈家庭中央空调的应用与发展”为主题,旨在探讨现代住宅中逐渐普及的家用中央空调系统。随着生活水平的提高和技术的进步,家庭中央空调因其高效、节能、舒适等特性,正逐渐取代传统的分体式空调,成为家居...
如果需要根据请求头部或cookie的变化来控制缓存行为,可以使用@vary_on_headers和@vary_on_cookie装饰器。这对于提供个性化内容尤为重要。 4. 考虑缓存失效策略: 当数据发生变化时,需要一种方式来清除旧的缓存...
此外,教师还可以通过装饰或改良器材,如在小沙包上缝上彩带来吸引学生的注意力,不仅有助于教学,还能激发学生创新体育器材的兴趣。同时,建立和谐融洽的师生关系,教师需要转变为指导者和朋友的角色,尊重每个学生...
在C#中,除了单例模式,还有其他设计模式,如工厂模式、观察者模式、装饰器模式等,都是面向对象设计的重要组成部分。在实际开发中,合理应用设计模式能够提高代码的可读性、可维护性和复用性。因此,学习和理解这些...
自定义语言的实现——解释器模式(五) 自定义语言的实现——解释器模式(六) 迭代器模式-Iterator Pattern 遍历聚合对象中的元素——迭代器模式(一) 遍历聚合对象中的元素——迭代器模式(二) 遍历聚合对象中的...