從趙本山的小品聯(lián)想到的Java設(shè)計(jì)模式

          春晚的小品中,宋丹丹問趙本山:把大象裝冰箱,總共分幾步?三步。至于哪三步,想必大家都會(huì)脫口而出。下面我就使用Java設(shè)計(jì)模式中的建造模式實(shí)現(xiàn)大象裝冰箱的方法。
          UML圖如下:

          抽象建造者角色

          /*
          *@author 我為J狂 建立日期 2007-4-19
          *
          */

          package net.blogjava.lzqdiy;

          public interface Make
          {
              
          void openDoor();//產(chǎn)生打開門的方法
              void putInto();//產(chǎn)生放進(jìn)去的方法
              void closeDoor();//產(chǎn)生關(guān)上門的方法
          }
          具體建造者角色
          /*
          *@author 我為J狂 建立日期 2007-4-19
          *
          */

          package net.blogjava.lzqdiy;
          /**
           * 產(chǎn)生使用冰箱的方法
           *
           
          */

          public class MakeFridgeMethod implements Make
          {
              
          private Method fridge;
              
          public  MakeFridgeMethod(String obj)
              
          {
                  fridge
          =new FridgeMethod(obj);
              }

              
          public void closeDoor()
              
          {
                  
          // TODO Auto-generated method stub
                  fridge.closeDoor();
              }


              
          public void openDoor()
              
          {
                  
          // TODO Auto-generated method stub
                   fridge.openDoor();
              }


              
          public void putInto()
              
          {
                  
          // TODO Auto-generated method stub
                  fridge.putInto();
              }


          }

          /*
          *@author 我為J狂 建立日期 2007-4-19
          *
          */

          package net.blogjava.lzqdiy;
          /**
           * 產(chǎn)生使用抽屜的方法
           *
           
          */

          public class MakeDrawerMethod implements Make
          {
              
          private Method drawer; 
              
          public MakeDrawerMethod(String obj)
              
          {
                  drawer
          =new DrawerMethod(obj);
              }

              
          public void closeDoor()
              
          {
                  
          // TODO Auto-generated method stub
                  drawer.closeDoor();
              }

              
              
          public void openDoor()
              
          {
                  
          // TODO Auto-generated method stub
                  drawer.openDoor();
              }


              
          public void putInto()
              
          {
                  
          // TODO Auto-generated method stub
                  drawer.putInto();
              }

          }

          抽象產(chǎn)品角色
          /*
          *@author 我為J狂 建立日期 2007-4-19
          *
          */

          package net.blogjava.lzqdiy;

          public interface Method
          {
              
          void openDoor();//產(chǎn)打開門的方法
              void putInto();//放進(jìn)去的方法
              void closeDoor();//關(guān)上門的方法
          }

          具體產(chǎn)品角色
          /*
          *@author 我為J狂 建立日期 2007-4-19
          *
          */

          package net.blogjava.lzqdiy;
          /**
           * 使用冰箱的方法
           *
           
          */

          public class FridgeMethod implements Method
          {
              
          private String obj;
              
              
          public FridgeMethod(String obj)
              
          {
                  
          this.obj = obj;
              }


              
          public void closeDoor()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("把冰箱門關(guān)上!");
              }


              
          public void openDoor()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("把冰箱門打開!");
              }


              
          public void putInto()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println(""+obj+"放進(jìn)去!");
              }

              
          }

          /*
          *@author 我為J狂 建立日期 2007-4-19
          *
          */

          package net.blogjava.lzqdiy;

          /**
           * 使用抽屜的方法
           *
           
          */

          public class DrawerMethod implements Method
          {

              
          private String obj;
              
              
          public DrawerMethod(String obj)
              
          {
                  
          this.obj = obj;
              }


              
          public void closeDoor()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("把抽屜門關(guān)上!");
              }


              
          public void openDoor()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("把抽屜門打開!");
              }


              
          public void putInto()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println(""+obj+"放進(jìn)去!");
              }

          }

          導(dǎo)演者角色

          /*
           *@author 我為J狂 建立日期 2007-4-19
           *
           
          */

          package net.blogjava.lzqdiy;

          public class Process
          {
              
          private Make make;

              
          private String obj;

              
          public Process(String obj)
              
          {
                  
          this.obj = obj;
              }


              
          public void getFridgeSteps()
              
          {
                  make 
          = new MakeFridgeMethod(obj);
                  System.out.print(
          "第一步:");
                  make.openDoor();
                  System.out.print(
          "第二步:");
                  make.putInto();
                  System.out.print(
          "第三步:");
                  make.closeDoor();
              }


              
          public void getDrawerSteps()
              
          {
                  make 
          = new MakeDrawerMethod(obj);
                  System.out.print(
          "第一步:");
                  make.openDoor();
                  System.out.print(
          "第二步:");
                  make.putInto();
                  System.out.print(
          "第三步:");
                  make.closeDoor();
              }

          }

           

          客戶代碼

          /*
          *@author 我為J狂 建立日期 2007-4-19
          *
          */

          package net.blogjava.lzqdiy;

          public class Client
          {

              
          /**
               * 
          @param args
               
          */

              
          public static void main(String[] args)
              
          {
                  
          // TODO Auto-generated method stub
                  Process process=new Process("大象");//關(guān)于如何裝大象的提問
                  System.out.println("要把大象裝入冰箱,一共分幾步?");
                  process.getFridgeSteps();
                  System.out.println(
          "要把大象裝入抽屜,一共分幾步?");
                  process.getDrawerSteps();
              }

          }

          輸出結(jié)果
          要把大象裝入冰箱,一共分幾步?
          第一步:把冰箱門打開!
          第二步:把大象放進(jìn)去!
          第三步:把冰箱門關(guān)上!
          要把大象裝入抽屜,一共分幾步?
          第一步:把抽屜門打開!
          第二步:把大象放進(jìn)去!
          第三步:把抽屜門關(guān)上!

          posted on 2007-04-19 21:29 我為J狂 閱讀(1614) 評(píng)論(3)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

          評(píng)論

          # re: 從趙本山的小品聯(lián)想到的Java設(shè)計(jì)模式 2007-04-20 13:17 交口稱贊

          汗  回復(fù)  更多評(píng)論   

          # re: 從趙本山的小品聯(lián)想到的Java設(shè)計(jì)模式 2007-06-09 21:55 itkui

          兄臺(tái)想東西果然不一般呀!  回復(fù)  更多評(píng)論   

          # re: 從趙本山的小品聯(lián)想到的Java設(shè)計(jì)模式 2007-06-10 08:41 我為J狂

          @itkui
          喜歡趙本山的小品,還喜歡編程,于是創(chuàng)作出了上面的作品,呵呵。  回復(fù)  更多評(píng)論   

          <2007年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(11)

          隨筆分類(48)

          文章分類(29)

          常去逛逛

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 津南区| 巴青县| 游戏| 田东县| 新泰市| 邵阳市| 定州市| 磐安县| 乌拉特中旗| 宁南县| 察雅县| 万宁市| 湛江市| 兴和县| 达拉特旗| 宣化县| 石渠县| 原平市| 蓝田县| 建平县| 澄江县| 盱眙县| 洪泽县| 大悟县| 黄陵县| 烟台市| 波密县| 房山区| 肥西县| 招远市| 巴南区| 福泉市| 兴义市| 鄯善县| 台南市| 鄱阳县| 天门市| 陆河县| 剑川县| 大新县| 康定县|