装饰设计模式 Decorator

package lesson06;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;

public class Demo01 {

	public static void main(String[] args) {
		//
		/**
		 * 一、设计模式【一种固定代码风格】
		 *     面试题:Java中有哪些设计模式
		 *     常用设计模式:装饰模式、单例模式、模版模式、适配器模式、代理模式、工厂模式...
		 *
		 * 二、装饰(Decorator)设计模式
		 * 	1.装饰模式的概念:
			装饰模式是动态的给一个对象添加一些额外的功能,就增加功能来说,装饰模式比生成子类更为灵活。
			装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。
			装饰模式是创建一个包装对象,也就是使用装饰来包裹真实的对象。	

		    2.装饰模式的实现方式
				1. 装饰对象和真实对象有相同的接口/抽象类。
				2. 装饰对象包含一个真实对象的引用(reference)
				3. 装饰对象的所有方法,内部实现都是通过真实对象的引用来调用,然后实现自己的功能

			3.适用性
				1. 需要扩展一个类的功能,或给一个类添加附加职责。
				2. 当不能采用生成子类来实现,比如final类
		 */

	/*	BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt"));
		BufferedOutputStream bos;
		BufferedReader br;
		BufferedWriter bw;*/

		/*GYFStudent stu = new GYFStudent();
		stu.code();*/

		GYFStudent stu = new GYFStudent(new UniversityStudent());
		stu.code();
	}

}

//1.接口
interface Person{
	public void code();
}

//2.接口实现类
final class UniversityStudent implements Person{

	@Override
	public void code() {
		// TODO Auto-generated method stub
		System.out.println("在大学期间学了一点点C语言...");
	}
}

/*class GYFStudent extends UniversityStudent{
	@Override
	public void code() {
		// TODO Auto-generated method stub
		super.code();
		System.out.println("在GYF IT EDU 学习Java语言...");
	}
}*/

class GYFStudent implements Person{

	private UniversityStudent us;
	public GYFStudent(UniversityStudent us){
		this.us = us;
	}

	//装饰对象的所有方法,内部实现都是通过真实对象的引用来调用,然后实现自己的功能
	@Override
	public void code() {
		us.code();
		System.out.println("在GYF IT EDU 学习Java语言...");
	}

}

  

原文地址:https://www.cnblogs.com/2eggs/p/12552106.html

时间: 2024-10-22 12:33:12

装饰设计模式 Decorator的相关文章

Design Pattern 设计模式 Decorator 装饰者模式

1 设计一个基类 2 继承这个基类,并包含这个基类的一个对象 3 创建继承类的时候,初始化这个基类,因为是基类指针,所以可以是所有基类的衍生类对象,那么就可以叠加任意多个衍生类对象了. 关键是在衍生类中包含一个基类对象,然后有了继承和包含两重关系,可以使得一个类一个类对象叠加,达到装饰目的. 等于是创建了一个对象指针链表,一个一个对象发挥其相应的作用. 下面程序装饰一个桌子,同时包含释放内存的处理. 关键要知道基类的析构函数必须使用虚函数,为什么? 1 如果基类不是析构函数,那么如果衍生类中包含

Decorator设计模式的实现中 装饰设计模式学习笔记

装饰设计模式 a)当某个类的某个方法不适应当前业务的需要思路:>扩展父类的可供扩展的方法,可以使有,但不优>装饰设计模式(推荐) 开发步骤: 1)写一个普通类或写一个普通类扩展[extends]一个父类 2)写一个需要被包装的实例变量 3)通过构造方式为被包装的实例变量赋值 4)对于不 满足需求的方法,重写父类的相关方法 5)对于满足需求的方法,直接调用被包装的对象 [可选] java package cn.xijie.decorator; import java.io.BufferedRea

Android与设计模式——装饰者(Decorator)模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同.装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展.(上文来源于网络) 装饰模式的类图如下: 在装饰模式中的角色有: ● 抽象构件(Context)角色:给

设计模式之装饰(Decorator)模式

(一)什么是装饰(Decorator)模式 装饰模式,又称为包装模式,它以对客户端透明的方式扩张对象的功能,是继承关系的替代方案之一. 装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展. (二)装饰模式的角色 1)抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象 2)具体构件(Concrete component)角色:定义一个将要接受附加责任的类 3)装饰角色(Decorator)角色:持有一个构建(Component)对象的实例 4)具体装饰(

Java软件设计模式------装饰设计模式

Java软件设计模式一共分为23种; 一般常用的有: 单例设计模式 装饰设计模式 工厂设计模式 装饰设计模式 定义:英文叫Decorator Pattern,又叫装饰者模式.装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 在生活中我们用程序员和项目经理的例子来比喻,项目经理是从程序员开始的,经过不断地积累工作经验.不断的学习新的知识,才有可能升职. 在装饰设计模式中项目经理就是程序员的增强. 程序猿: 写程序 项目

二十、装饰设计模式

1. 装饰设计模式介绍 定义 动态地给一个对象添加一些额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活. 2. 装饰设计模式使用场景 动态地给一个对象添加一些额外的职责. 3. 装饰设计模式UML类图 角色介绍: Component:抽象组件,充当的是被装饰的原始对象. ConcreteComponent:组件具体实现类. Decotor:抽象装饰类:职责就是为了装饰组件对象,内部有一个指向组件对象的引用. ConcreteDecoratorA:装饰者的具体实现类 Client:测试类

Java Web总结二十Filter、装饰设计模式

一.Filter的部署--注册Filter <filter> <filter-name>testFitler</filter-name> <filter-class>org.test.TestFiter</filter-class> <init-param> <param-name>word_file</param-name> <param-value>/WEB-INF/word.txt</p

[javaSE] IO流(装饰设计模式)

装饰设计模式:当想要对已有的对象进行功能增强时,可以自定义类将已有的对象传入,并提供加强功能,自定义的该类称为装饰类 典型的: Reader--FileReader --BufferedReader class Decorator{ public void eat(){ System.out.println("吃饭"); } } public class DecoratorDemo extends Decorator{ public DecoratorDemo() { } public

设计模式-Decorator模式

目录 一个例子(贪玩蓝月) 传统继承实现 装饰器模式实现 对比 总结 Decorator(装饰器)模式属于结构型模式. 比如当其需要三种不同的附加特性,可以为其创建三个派生类.但是若它还需要同时具有其中两种特性或者是各种特性的任意组合的时候,类继承的方法就不再适合了. 它允许向一个现有的对象不通过继承来添加新的功能,同时又不改变其结构. 一个例子(贪玩蓝月) 前一阵子张家辉代言的<贪玩蓝月>广告火了,"我系喳喳辉,是兄弟就来砍我-"被洗脑到现在,正好用这个游戏来解释一下装饰