16,装饰设计模式
16.1装饰设计模式
装饰设计模式的作用,是对一些对象的功能进行增强。
从之前学到的继承可以知道,继承也可以对对象进行功能的增强,实现扩展。
那么装饰设计模式相比较继承有什么区别?
对于继承来说,如果一个类需要功能的扩展,则需要有一个子类去继承这个类,并对这个类进行函数的覆盖,功能内容的扩展等等,可见,如果有很多的类需要进行功能的增强,就需要有很多的类去继承。这样的话,显得继承体系会越来越庞大,继承体系变得复杂。而装饰设计模式在这方面要比继承显得更灵活,一个装饰类可以去接收与他所属的同一个父类或接口的所有子类的被装饰类,这样就不会有太多的子类产生,所以相比较继承来说更具灵活性。
16.2装饰设计模式的特点:
特点:装饰类和被装饰类必须所属于同一个父类或接口。
如:模拟装饰类和被装饰类
public class DesignModeDemo {
public static void main(String[] args) {
NewComputer newcomp=new NewComputer(new Upan());//装饰类接收被装饰类,对其功能增强
newcomp.open();//打开电脑
//Upan open
newcomp.close();//Upan close
//关闭电脑
}
}
interface Usb{
void open();
void close();
}
class Upan implements Usb{//被装饰类
public void open(){
System.out.println("Upan open");
}
public void close(){
System.out.println("Upan close");
}
}
class NewComputer implements Usb{//装饰类,对被装饰类Upan的功能进行增强
private Usb u;
NewComputer(Usb u){//使用装饰类和被装饰类所属的接口或父类接收。
this.u=u;
}
@Override
public void open() {
System.out.println("打开电脑");
u.open();
}
@Override
public void close() {
u.close();
System.out.println("关闭电脑");
}
}
在IO流中,比如:字符缓冲流BufferedReader、BufferedWriter,字节缓冲流BufferedInputStream、BufferedOutputStream都是使用了装饰设计的模式,对字符流和字节流进行功能的增强。提高字节流和字符流的效率。
如:
BufferedReader
(Reader in)
可以接收Reader的子类,对被装饰类进行功能增强
BufferedWriter
(Writer out)
可以接收Writer的子类,对被装饰类进行功能增强
BufferedReader br=new BufferedReader(new FileReader(“关联的File对象”));
BufferedWriter bw=new BufferedWriter(new FileWriter(“关联的File对象”));
BufferedInputStream(InputStream in) 可以接收InputStream的子类,对被装饰类进行功能增强
BufferedOutputStream(OutputStream out) 可以接收OutputStream的子类,对被装饰类进行功能增强
BufferedInputStream bis=new BufferedInputStream(new FileInputStream());
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream());
---------------------- ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ----------------------