A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 腹黑生姜 中级黑马   /  2015-6-20 20:02  /  231 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

说说装饰类和继承的区别?

1 个回复

倒序浏览
裝飾類? 應該是在說 Decorator 吧?

什麼是裝飾設計模式:
當想要對已有的對象進行功能增強時,
可以定義類,將已有對像傳入,基於已有的功能,並提供加強功能。
那麼自定義的該類稱為裝飾類。
裝飾類通常會通過構造方法接收被裝飾的對象。
並基於被裝飾的對象的功能,提供更強的功能。


如一個簡單的demo 人吃飯,剛開始人窮只是普通的吃飯後來人生活好了吃飯就不一樣了增強了吃飯的功能雖然例子不是恰當能說明問題就行
看代碼:
Java代碼

class Person
{
    public void chiFan(){

    System.out.println("吃飯");
    }
}

class SuperPerson
{
    private Person p;
    public SuperPerson(Person p){

    this.p=p;
    }

    public void superChiFan(){

    System.out.println("開胃酒");
    p.chiFan();

    System.out.println("咖啡");
    }

}
public class PersonDemo
{   public static void main(String args[]){
    Person p=new Person();

    SuperPerson sp= new SuperPerson(p);

    sp.superChiFan();
    }

}
以上只是簡單說明一下,在JAVA IO中用了很多增強如:FileRead中read()方法只是一個一個字節去讀,為了讀得更快在BufferedReader就增強了read()方法而產生了reandLine()一行一行的去讀

有人說沒必要那麼麻煩:你只要拿superPerson繼承person 在覆寫person的chiFan()方法不就行了?
裝飾是構造函數參數傳遞進行增強
如果為了某個功能而產生子類(繼承)那麼那個體係是非常臃腫的

例如:你有個對像有個功能是在N年前建立的,如今你覺得功能不夠用了寫個類把對像傳進來就可以解決問題瞭如果這個功能寫錯了我就把自己寫的功能去掉又不影響以前的功能靈活性相當強的。

裝飾模式比繼承要靈活。避免了繼承體系臃腫。
而且降低了類於類之間的關係。
裝飾類因為增強已有對象,具備的功能和已有的是相同的,只不過提供了更強功能。
所以裝飾類和被裝飾類通常是都屬於一個體系中的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马