装饰设计模式 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语言...");
	}
	
}

  

posted @ 2020-03-23 14:42  2eggs  Views(131)  Comments(1Edit  收藏  举报