Maison > Java > javaDidacticiel > Cas d'implémentation du modèle Java Decorator

Cas d'implémentation du modèle Java Decorator

黄舟
Libérer: 2017-03-10 13:17:43
original
1465 Les gens l'ont consulté

En Java, de nombreuses classes sous le package io sont l'incarnation du modèle de décorateur typique, tel que :

new BufferedOutputStream(OutputStream out)
new BufferedInputStream(InputStream in);
new PrintWriter(OutputStream out)
new FilterReader(Reader in);
Copier après la connexion

La classe décorée implémente la même interface que la classe décorée,
est décorée Classe, peu importe la classe d'implémentation utilisée pour la décorer
La même méthode commerciale, la classe décorée appelle la méthode de la classe de décoration pour améliorer la fonction de la classe de décoration

<🎜. >Exemple :

Diagramme de classes



public interface IReader {
	void read();
}
Copier après la connexion
public class Reader implements IReader {

	@Override
	public void read() {
		System.out.println("read of Reader");
	}

}
Copier après la connexion


public class BufferedReader implements IReader {
	
	private IReader mReader;
	public BufferedReader(IReader reader) {
		this.mReader = reader;
	}
	
	@Override
	public void read() {
		System.out.println("read of BufferedReader");
		mReader.read();
	}

}
Copier après la connexion


/*
 * 特点:
 * (1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。
 (2) 装饰对象包含一个真实对象的引用(reference)
 (3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。
 (4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。
 在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。而装饰后,持有了真实对象,用以增强其功能。

 装饰者与适配器模式的区别
 关于新职责:适配器也可以在转换时增加新的职责,但主要目的不在此。装饰者模式主要是给被装饰者增加新职责的。
 关于其包裹的对象:适配器是知道被适配者的详细情况的(就是适配类)。装饰者只知道其接口是什么,
 至于其具体类型(是基类还是其他派生类)只有在运行期间才知道。
 
 */
public class Test {
	public static void main(String[] args) {
		Reader reader = new Reader();
		reader.read();
		System.out.println("----------");
		BufferedReader bufferedReader = new BufferedReader(reader);
		bufferedReader.read();

	}
}
Copier après la connexion


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal