您的位置:首页 > 编程语言 > Java开发

装饰设计模式(Decorator)-IO

2017-04-07 17:29 337 查看
一、装饰设计模式

对一组对象的功能进行增强(对已有类进行增强使用装饰设计模式)

缓冲区就是根据装饰设计模式设计出来了的,增强了字符、字节流类。

继承虽然也能够实现功能的扩展和增强,但是会导致继承体系越来越臃肿,不够灵活,装饰比继承灵活。

特点:装饰类和被装饰类都必须所属同一个接口或着父类

女人——化妆+学习——完美的女人

房子——装修——漂亮的房子

能用接口多态,就不要用继承

继承形式

//测试
public class Text {
public static void main(String[] args) {
People p = new ChGF(new TgGF(new People("张三", "男")));//父类引用指向子类对象
p.GF();
}
}
//
//原类——人
public class People {

private String name;
private String sex;

public People(String name, String sex) {
this.name = name;
this.sex = sex;
}

public String getName() {
return name;
}

public String getSex() {
return sex;
}

public void GF() {
System.out.println("我不会功夫");
}
}

//抽象类继承原类,重写原类的所有方法,封装一个原类
public abstract class WipperPeople extends People {

private People people;

public WipperPeople(People people) {
super(people.getName(), people.getSex());
this.people = people;
}

@Override
public String getName() {
return people.getName();
}

@Override
public String getSex() {
return people.getSex();
}

@Override
public void GF() {
people.GF();
}
}

//继承抽象类的多种包装类
public class ChGF extends WipperPeople {

public ChGF(People people) {
super(people);
}

@Override
public void GF() {
super.GF();
System.out.println("我拜了李小龙为师,现在我也会中国功夫了!");
}
}

public class TgGF extends WipperPeople {

public TgGF(People people) {
super(people);
}

@Override
public void GF() {
super.GF();
System.out.println("我去了趟泰国,学会了泰拳!");
}
}


接口形式

//接口:原类规范
//原类 实现 接口
//抽象类 实现 接口,内部封装一个原类,重写接口所有方法
//包装类继承抽象类,可根据需要覆写方法
//测试,接口类引用指向实现类对象


LineNumberReader(一个装饰类)

跟踪行号,可以设置和获取当前行号,默认从0开始编号

public class Demo {
public static void main(String[] args) throws IOException {
FileReader f = new FileReader("Demo(1).txt");
LineNumberReader l = new LineNumberReader(f);
String line = null;
l.setLineNumber(2);//设置行号从哪里开始
while((line = l.readLine()) != null) {
sopl(line + ",,," + l.getLineNumber());//获取行号和每行内容
}
l.close();
}
}
//读.java文件时使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 设计模式