從趙本山的小品聯想到的Java設計模式

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

          抽象建造者角色

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

          package net.blogjava.lzqdiy;

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

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

          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;
          /**
           * 產生使用抽屜的方法
           *
           
          */

          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();
              }

          }

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

          package net.blogjava.lzqdiy;

          public interface Method
          {
              
          void openDoor();//產打開門的方法
              void putInto();//放進去的方法
              void closeDoor();//關上門的方法
          }

          具體產品角色
          /*
          *@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("把冰箱門關上!");
              }


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


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

              
          }

          /*
          *@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("把抽屜門關上!");
              }


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


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

          }

          導演者角色

          /*
           *@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("大象");//關于如何裝大象的提問
                  System.out.println("要把大象裝入冰箱,一共分幾步?");
                  process.getFridgeSteps();
                  System.out.println(
          "要把大象裝入抽屜,一共分幾步?");
                  process.getDrawerSteps();
              }

          }

          輸出結果
          要把大象裝入冰箱,一共分幾步?
          第一步:把冰箱門打開!
          第二步:把大象放進去!
          第三步:把冰箱門關上!
          要把大象裝入抽屜,一共分幾步?
          第一步:把抽屜門打開!
          第二步:把大象放進去!
          第三步:把抽屜門關上!

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

          評論

          # re: 從趙本山的小品聯想到的Java設計模式 2007-04-20 13:17 交口稱贊

          汗  回復  更多評論   

          # re: 從趙本山的小品聯想到的Java設計模式 2007-06-09 21:55 itkui

          兄臺想東西果然不一般呀!  回復  更多評論   

          # re: 從趙本山的小品聯想到的Java設計模式 2007-06-10 08:41 我為J狂

          @itkui
          喜歡趙本山的小品,還喜歡編程,于是創作出了上面的作品,呵呵。  回復  更多評論   

          <2007年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導航

          統計

          常用鏈接

          留言簿(11)

          隨筆分類(48)

          文章分類(29)

          常去逛逛

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 晋江市| 延吉市| 贡山| 增城市| 晋州市| 松潘县| 武山县| 方山县| 宝应县| 西峡县| 吉林市| 万州区| 仙桃市| 文成县| 通河县| 息烽县| 阜阳市| 积石山| 金乡县| 历史| 霞浦县| 新营市| 阜阳市| 礼泉县| 利辛县| 望谟县| 麻阳| 芜湖市| 咸宁市| 贵德县| 阳高县| 金寨县| 新安县| 从化市| 巫溪县| 湛江市| 郑州市| 松阳县| 阜平县| 平塘县| 湘潭市|