首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

黑马软件工程师_<<装饰设计模式>>

2013-10-02 
黑马程序员_装饰设计模式--------------------ASP.NetAndroidIOS开发、.Net培训、期待与您交流! -------

黑马程序员_<<装饰设计模式>>

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


1. 装饰设计模式        1.  概述

       装饰设计模式是对已有类的对象进行封装,然后使其具有更强大的功能,当定义好的类功能不够完善的时候,我们不希望是修改源代码,那么我们就可以定义好一个类,把其对象封装到里面,然后对其功能进行扩展。

      一般设计的模式:

         当你想要对已有的独享尽心功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供增强功能,那么自定义的该类称为装饰类。

         装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能。

 

        2. 应用实例

        当我们操作IO流的时候,在读取或者是写入的时候,使用的是FileWriter和FileReader,由于效率不高,我们采用了缓冲技术,BufferedWriter和BufferedReader,这样我们就提高了效率,实际上这里就是使用了缓冲技术,装饰设计模式,把Writer和Reader封装到缓冲类中,对其功能增强了,增强了跨平台的newLine方法和读 更方便的readLine方法。都是基于现有类的方法进行扩展的。

 

下面我们就模拟一下这个实例:

 

public class Person {//普通类    public void eat(){    System.out.println("吃饭");    }}/** * 装饰类 *进行封装了Person类对象,进行功能的扩展 */public class superPerson {     private Person person;     public superPerson(Person person){     this.person=person;     }     public void superEat(){     System.out.println("喝点小酒");     person.eat();     System.out.println("看会电视");     System.out.println("打太极");     }    }/** * 测试类 */public class Text {  public static void main(String[] args){    Person p=new Person();//普通类对象    superPerson pp=new superPerson(p);//装饰类对象    pp.superEat();  } }结果:喝点小酒吃饭看会电视打太极


 

        4. 装饰类和继承类

 

     假如我们对已有的类进行扩展的方式使用继承的话,那么已有类(A)没增加一个子类(a extends A),我们都要对其子类进行再次继承(aa extends a),那么这样继承体系就太复杂,太臃肿了。

 

     那么我们可以把现有类进行封装到一个类中,然后利用基类对象进行优化,

public class buffered{

    private Aes;

    publicbuffered(A  es){

this.es=es;

}

 

  下面根据es对象的方法,然后对其功能进行扩展,可以重写,也可以继续已有方法,写其他功能更完善的方法。

 

这样的体系就更简单易懂,这个就是装饰类。也是我们的装饰设计模式思想。

这也是从封装到装饰的过程。

 

装饰模式和继承的联系去区别:

装饰模式是对继承之间的关系的优化,这样就比继承更灵活,避免了继承体系臃肿,而且降低了类与类之间的关系。

装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能,所以装饰类和被装饰类通常都属于一个体系中。

 

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


热点排行