yuyee

          裝飾器


          裝飾器:裝飾器模式主要用于系統(tǒng)擴(kuò)張功能用,在系統(tǒng)原有的功能上,擴(kuò)展出其他的功能,JDKIO包用到很多,比如datainputstream之類,需要用其他流進(jìn)行構(gòu)造的上層類,符合面向?qū)ο笤O(shè)計(jì)的開閉原則

          下面我來寫個(gè)例子:

          首先,寫一個(gè)Car模版,定義基本屬性及行為功能driver

          package com.google.desginpattern.decoration;
          //其實(shí)這是個(gè)模版
          public abstract class Car {
          private int spreed;
          public int getSpreed() {
          return spreed;
          }
          public void setSpreed(int spreed) {
          this.spreed = spreed;
          }
          public abstract void driver();
          }

           

          第二步:具體車比如寶馬,這是目前系統(tǒng)中這個(gè)類能提供的功能

          package com.google.desginpattern.decoration;
          //目前系統(tǒng)中此類的功能
          public class BMWCar extends Car {
          @Override
          public void driver() {
          System.out.println(
          "我開著寶馬車");
          }
          }

           

          現(xiàn)在我想在這個(gè)類上擴(kuò)展出其他功能,比如:泡妞

          第三步:定義一個(gè)裝飾模板,為什么給他定義個(gè)模板呢~因?yàn)榭梢越o這個(gè)BMWCar類裝飾很不同的功能,不只泡妞一個(gè)~

          繼承Car父類,覆蓋driver功能,調(diào)用Car引用完成driver功能

          package com.google.desginpattern.decoration;
          //裝飾器父類
          public abstract class DecorationCar extends Car {
          // 引入car
          private Car car;
          @Override
          public void driver() {
          car.driver();
          // 調(diào)用此car來完成裝飾器的功能
          }
          public Car getCar() {
          return car;
          }
          public void setCar(Car car) {
          this.car = car;
          }
          }

           

          第四步:具體的裝飾功能,添加一個(gè)構(gòu)造函數(shù),參數(shù)為Car,為裝飾父類Car引用賦值,其實(shí)就是原來具體的功能類,回想下IO包里經(jīng)常new的代碼段就明白~~

          package com.google.desginpattern.decoration;
          //具體的裝飾類,添加額外的泡妞功能
          public class DecorationBMWCar extends DecorationCar {
          public DecorationBMWCar(Car car) {
          super.setCar(car);
          }
          @Override
          public void driver() {
          // TODO Auto-generated method stub
          super.driver();// 調(diào)用原來的功能
          System.out.println("泡妞");// 添加額外的功能
          }
          }

           

          測(cè)試類:構(gòu)造的方法很像IO包里的流

          package com.google.desginpattern.decoration;
          public class Test {
          public static void main(String[] args) {
          Car car 
          = new DecorationBMWCar(new BMWCar());
          car.driver();
          }
          }

           

          輸出:

          我開著寶馬車

          泡妞

          posted on 2010-11-29 21:36 羔羊 閱讀(197) 評(píng)論(0)  編輯  收藏 所屬分類: desginpattern

          主站蜘蛛池模板: 东乡县| 安徽省| 兴义市| 田阳县| 苗栗县| 济南市| 台北市| 武平县| 桐柏县| 平江县| 长寿区| 宕昌县| 行唐县| 通许县| 栾川县| 鹤壁市| 洪泽县| 辛集市| 定襄县| 天水市| 寿阳县| 鄯善县| 余庆县| 南城县| 屯留县| 上思县| 连江县| 固原市| 根河市| 邵阳市| 皮山县| 平遥县| 抚州市| 大理市| 新民市| 荥阳市| 蕉岭县| 凌云县| 民县| 万年县| 瑞金市|