设计模式——装饰设计模式

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

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流中,比如:字符缓冲流BufferedReaderBufferedWriter,字节缓冲流BufferedInputStreamBufferedOutputStream都是使用了装饰设计的模式,对字符流和字节流进行功能的增强。提高字节流和字符流的效率。

如:

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培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值