yuyee

          2010年11月29日 #

          適配器

          適配器模式:將一個現有類實現的功能接口轉變為客戶希望的接口

          場景:你想使用一個已經存在的類,但是這個類的接口不符合需求,所以需要適配

          2中實現:一種是繼承,一種是委托,先來看看繼承

             

          第一步:系統現有功能

          package com.google.desginpattern.adapter;
          /**
           * 現有系統提供的功能
           * 
           * 
          @author Administrator
           * 
           
          */
          public class BMWCar {
          public void quickDriver() {
          System.out.println(
          "寶馬太快");
          }
          }

           

          第二步:客戶需要的接口

          package com.google.desginpattern.adapter;
          /**
           * 客戶需要的接口
           * 
          @author Administrator
           *
           
          */
          public interface Car {
          public void driver();
          public void brake();
          }

           

          第三步:實現客戶需要的功能

          package com.google.desginpattern.adapter;
          /**
           * 匹配客戶需求的實現
           * 
          @author Administrator
           *
           
          */
          public class CarAdapter extends BMWCar implements Car {
          @Override
          public void brake() {
          System.out.println(
          "剎車");
          }
          @Override
          public void driver() {
          quickDriver();
          }
          }

           

          測試類:

           

          package com.google.desginpattern.adapter;


          public class Test {

          public static void main(String[] args) {


          Car car 
          = new CarAdapter();

          car.brake();

          car.driver();

          }


          }

          輸出:

          剎車

          寶馬太快

          如果是委托的方式,改寫adapter

          package com.google.desginpattern.adapter;
          /**
           * 匹配客戶需求的實現
           * 
           * 
          @author Administrator
           * 
           
          */
          public class CarAdapter implements Car {
          private BMWCar car;
          @Override
          public void brake() {
          System.out.println(
          "剎車");
          }
          @Override
          public void driver() {
          car.quickDriver();
          }
          public BMWCar getCar() {
          return car;
          }
          public void setCar(BMWCar car) {
          this.car = car;
          }
          }

           

          posted @ 2010-11-29 22:28 羔羊| 編輯 收藏

          裝飾器


          裝飾器:裝飾器模式主要用于系統擴張功能用,在系統原有的功能上,擴展出其他的功能,JDKIO包用到很多,比如datainputstream之類,需要用其他流進行構造的上層類,符合面向對象設計的開閉原則

          下面我來寫個例子:

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

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

           

          第二步:具體車比如寶馬,這是目前系統中這個類能提供的功能

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

           

          現在我想在這個類上擴展出其他功能,比如:泡妞

          第三步:定義一個裝飾模板,為什么給他定義個模板呢~因為可以給這個BMWCar類裝飾很不同的功能,不只泡妞一個~

          繼承Car父類,覆蓋driver功能,調用Car引用完成driver功能

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

           

          第四步:具體的裝飾功能,添加一個構造函數,參數為Car,為裝飾父類Car引用賦值,其實就是原來具體的功能類,回想下IO包里經常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();// 調用原來的功能
          System.out.println("泡妞");// 添加額外的功能
          }
          }

           

          測試類:構造的方法很像IO包里的流

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

           

          輸出:

          我開著寶馬車

          泡妞

          posted @ 2010-11-29 21:36 羔羊| 編輯 收藏

          主站蜘蛛池模板: 永丰县| 泸溪县| 新疆| 金沙县| 紫金县| 乐安县| 双辽市| 沙坪坝区| 安图县| 余干县| 廉江市| 泰州市| 徐汇区| 舒城县| 逊克县| 闻喜县| 依安县| 佛学| 甘肃省| 武胜县| 凤翔县| 卢氏县| 新建县| 琼中| 石阡县| 郎溪县| 宽城| 来凤县| 曲阳县| 呼图壁县| 乐安县| 和田市| 无锡市| 炉霍县| 阜新市| 潼南县| 陇南市| 鄂尔多斯市| 巨鹿县| 白城市| 西峡县|