yuyee

          2010年11月10日 #

          適配器

          適配器模式:將一個現(xiàn)有類實現(xiàn)的功能接口轉變?yōu)榭蛻粝M慕涌?/span>

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

          2中實現(xiàn):一種是繼承,一種是委托,先來看看繼承

             

          第一步:系統(tǒng)現(xiàn)有功能

          package com.google.desginpattern.adapter;
          /**
           * 現(xiàn)有系統(tǒng)提供的功能
           * 
           * 
          @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();
          }

           

          第三步:實現(xiàn)客戶需要的功能

          package com.google.desginpattern.adapter;
          /**
           * 匹配客戶需求的實現(xiàn)
           * 
          @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;
          /**
           * 匹配客戶需求的實現(xiàn)
           * 
           * 
          @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 羔羊| 編輯 收藏

          裝飾器


          裝飾器:裝飾器模式主要用于系統(tǒng)擴張功能用,在系統(tǒng)原有的功能上,擴展出其他的功能,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();
          }

           

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

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

           

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

          第三步:定義一個裝飾模板,為什么給他定義個模板呢~因為可以給這個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;
          }
          }

           

          第四步:具體的裝飾功能,添加一個構造函數(shù),參數(shù)為Car,為裝飾父類Car引用賦值,其實就是原來具體的功能類,回想下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();// 調用原來的功能
          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 羔羊| 編輯 收藏

          IOC初始化和互相引用解決

               摘要: 觀察IOC中容器初始化某個Bean順序,現(xiàn)先一個JAVABean類,看看控制臺輸出:package com.google.aop.exception.ioc; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory...  閱讀全文

          posted @ 2010-11-10 16:27 羔羊| 編輯 收藏

          主站蜘蛛池模板: 南宁市| 西充县| 平度市| 滁州市| 土默特右旗| 龙井市| 盐源县| 仙桃市| 太和县| 大渡口区| 南京市| 开阳县| 金川县| 蓬安县| 汶川县| 增城市| 从化市| 丽水市| 信阳市| 邵阳县| 鱼台县| 长岛县| 新营市| 朝阳区| 东乌珠穆沁旗| 思南县| 庆云县| 同仁县| 桑植县| 江华| 平湖市| 温泉县| 开平市| 民乐县| 定结县| 科技| 滨海县| 即墨市| 漯河市| 田东县| 麻阳|