超牛牪犇Java之装饰者模式

思想:将原有的功能进行提升

步骤:

1.将被装饰者当做类中一个成员变量

2.在构造方法中 进行成员变量的赋值

        赋值后就相当于可以拿到被装饰的这个对象

        有这个对象就能调用该对象的方法

3.对方法进行升级

example1:

//上兴趣班的接口
interface Study{
	//在兴趣班上课
	public abstract void studys();
}
class Student implements Study{
	@Override
	public void studys() {
		System.out.println("学吉他");
		System.out.println("学画画");	
	}
}
//社会技能类
class Students implements Study{
	//将学生作为成员变量
	private Students student;
//生成构造方法
	public Students(Students student) {
		super();
		this.student = student;
	}

	public Students() {
		super();
		// TODO Auto-generated constructor stub
	}
	//对学生方法进行升级
	@Override
	public void studys() {
			//调用被装饰者的功能
		student.studys();
		//升级
		System.out.println("学开车");
		System.out.println("学电脑");
	}
}

在main函数中调用:

Students student = new Students();
//注意:创建时 一定要给被装饰者赋值
Students loStudent = new Students(student);
loStudent.studys();

example2:

利用装饰者模式 实现获取设置行号功能

class lineNumberReader1 {
	//声明成员变量(被包装的对象)
	//成员变量 可以是抽象类也可以是接口
	private Reader reader;
	private int num = 0;
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public lineNumberReader1(Reader reader) {
		super();
		this.reader = reader;
	}
	public lineNumberReader1() {
		super();
		// TODO Auto-generated constructor stub
	}
	//对功能升级
	//从读取的方法中 获取行号
	public String myReadLine() throws IOException {
		num ++;
		int len = 0;
		StringBuffer stringBuffer = new StringBuffer();
		while ((len = reader.read()) != -1) {
			if (len != 10){
			stringBuffer.append((char)len);
			}else {
				return stringBuffer.toString();
			}
		}
		if (stringBuffer.length() == 0) {
			return null;
		}
		//保证方法 肯定会有返回值
		return stringBuffer.toString();
	}
	//关闭流方法
	public void myClose() throws IOException {
		reader.close();
	}
}

在main函数中调用

File file = new File("/Users/Commander/Desktop/test/taylor.txt");
FileReader fr = new FileReader(file);
lineNumberReader1 line = new lineNumberReader1(fr);
String string= null;
line.setNum(100);
while ((string = line.myReadLine()) != null) {
	System.out.println( line.getNum() + ":" + string);
}
line.myClose();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值