java設計模式-裝飾模式

什麼是裝飾模式:
裝飾模式就是動態的爲一個對象添加新的功能,它是一種代替繼承的技術,毋須通過繼承增加子類就能拓展對象功能的模式。

開發中應用場景:
1.IO流中,設計的輸入和輸出
2.Servlet api提供的一個re quest對象的decrator模式的默認實現類HttpServletRequestWrap,遇到wrap字樣的基本都是裝飾模式
3.swing中圖形設計界面的功能

實現例子:
首先是設計裝飾模式接口,然後讓子類實現

/**
 * 能力接口
 * 
 * @author liuxg
 * @date 2016年5月27日 上午11:46:38
 */
public interface Ability {

    void whatAblity(); // 有什麼能力

}


public class Person implements Ability {

    @Override
    public void whatAblity() {

        System.out.println("普通人而已");

    }

}

class FlyPerson implements Ability {

    private Ability ability;

    public FlyPerson(Ability ability) {
        this.ability = ability;
    }

    @Override
    public void whatAblity() {
        ability.whatAblity();
        System.out.println("會飛的能力");

    }

}

class StrengePerson implements Ability {

    private Ability ability;

    public StrengePerson(Ability ability) {
        this.ability = ability;
    }

    @Override
    public void whatAblity() {
        ability.whatAblity();
        System.out.println("超級大力氣");

    }

}

class ChangePerson implements Ability {

    private Ability ability;

    public ChangePerson(Ability ability) {
        this.ability = ability;
    }

    @Override
    public void whatAblity() {
        ability.whatAblity();
        System.out.println("會變身");
    }

}

這裏我們是想裝飾一個人,讓他有能飛,能變身,還還有超級大力氣,這三種能力除了能一起,還能相互組合,繼承做這個很麻煩吧

public class Client {


    public static void main(String[] args) {

        Person person = new Person();
        person.whatAblity();

        System.out.println("##########################");

        FlyPerson flyPerson = new FlyPerson(person);
        flyPerson.whatAblity();

        System.out.println("##########################");
        ChangePerson changePerson = new ChangePerson(flyPerson);
        changePerson.whatAblity();


        System.out.println("##########################");
        StrengePerson strengePerson = new StrengePerson(changePerson);
        strengePerson.whatAblity();
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章