从赵本山的小品联想到的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狂 阅读(1605) 评论(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
喜欢赵本山的小品,还喜欢编程,于是创作出了上面的作品,呵呵。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 
<2007年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(11)

随笔分类(48)

文章分类(29)

常去逛逛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜