转载:作者:左洸 出处:软件园

不管是穷人还是富人,都要谈恋爱结婚,而且每个人的婚恋经历,步骤大体上都是一样的,比如说:见面、吃饭、游玩、婚礼、婚房   等等,这些步骤是社会已经给我们安排好了的,他就像一个大纲、一个模版,作为社会中的一个成员,不管是穷是富,都只能按照步骤去做,谁也不能改变这些步骤,但是每个步骤的具体内容暂时还是抽象的,怎么见面,怎么吃饭,怎么游玩,婚礼怎么办,婚房是什么样的,一千个人可能有一千个情况,比如你穷,和女朋友吃饭一碗面条也能打发;如果你富有,山珍海味也是吃饭。这就是为什么大家都恋爱结婚,却有人欢喜有人忧啊。

按照一个已经列好的大纲,根据自己具体的情况,实现其中的抽象步骤,这就是模版方法模式。

点击浏览更多的“说故事、学模式”系列

下面让我们来看看,用C#语言怎么描述穷人和富人的不同的婚恋历程,这是一个典型的模版方法模式。

TemplateMethod.cs

 

using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Template
{
    
// ***************************************************************

    
// 客户端
     class  Client
    
{
        
static   void  Main( string [] args)
        
{
            
try
            
{
                Society rich 
=   new  Rich();
                Society poor 
=   new  Poor();
                Society et 
=   new  ET();

                Console.WriteLine(
" 富人的婚恋过程。。。。。。。。\n " );
                Marry(rich);

                Console.WriteLine();

                Console.WriteLine(
" 穷人的婚恋过程。。。。。。。。\n " );
                Marry(poor);

                Console.WriteLine();

                Console.WriteLine(
" 外星人的婚恋过程。。。。。。。。\n " );
                Marry(et);
            }

            
catch  (Exception e)
            
{
                Console.WriteLine(e.Message);
                Console.Read();
            }


        }


        
static   public   void  Marry(Society society)
        
{
            society.Marry();
        }

    }


    
// ******************************************************************

    
// 社会公认的婚恋过程,他是抽象的,只有步骤没有具体内容
     public   abstract   class  Society
    
{
        
abstract   public   void  Meet();     // 第一次见面
         abstract   public   void  Dinner();   // 吃饭
         abstract   public   void  Journey();  // 游玩约会
         abstract   public   void  Wedding();  // 婚礼
         abstract   public   void  House();    // 婚房

        
// 每一个人都要经历的婚恋历程,需要做哪些事情社会已经替你安排好了
        
// 人在江湖身不由己,不管你是穷人还是富人你都无法改变这个过程
        
// 但是,具体实施的时候我们还是可以掌握着自己的命运
        
// 这里是恋爱结婚的模版方法
         public   void  Marry()
        
{
            Console.Write(
" 见面: " );
            Meet();

            Console.Write(
" 吃饭: " );
            Dinner();

            Console.Write(
" 游玩: " );
            Journey();

            Console.Write(
" 婚礼: " );
            Wedding();

            Console.Write(
" 婚房: " );
            House();
        }

    }


    
// ******************************************************************

    
// 我希望自己是一个富人,下面是我设想的富人的婚恋过程
     public   class  Rich : Society
    
{
        
public   override   void  Meet()
        
{
            Console.WriteLine(
" 用半年的时间调查对方的详细情况,见面这天签订婚姻合同,一个月后举行婚礼\n " );
        }


        
public   override   void  Dinner()
        
{
            Console.WriteLine(
" 18.8万元的天价年夜饭一份,先凑合一下吧!\n " );
        }


        
public   override   void  Journey()
        
{
            Console.WriteLine(
" 花2000万美元坐神舟8号到太空去看星星\n " );
        }


        
public   override   void  Wedding()
        
{
            Console.WriteLine(
" 克林顿作为特邀嘉宾主持,对全世界150个国家进行现场直播\n " );
        }


        
public   override   void  House()
        
{
            Console.WriteLine(
" 给小布什打个招呼,借用白宫一个月\n " );
        }

    }


    
// ******************************************************************

    
// 虽然我很穷,但是我也要恋爱结婚
     public   class  Poor : Society
    
{
        
public   override   void  Meet()
        
{
            Console.WriteLine(
" 见面之前只有对方的电话号码,在天桥底下见面,十五分钟啥也没打听出来\n " );
        }


        
public   override   void  Dinner()
        
{
            Console.WriteLine(
" 两份肯德鸡套餐,花了五六十元,心疼啊!!!\n " );
        }


        
public   override   void  Journey()
        
{
            Console.WriteLine(
" 从公园后墙跳进去,里面的长椅可以免费坐,惊险刺激又节约\n " );
        }


        
public   override   void  Wedding()
        
{
            Console.WriteLine(
" 只要认识的人一律发请帖,收了这么多年的罚款单,得连本代利赚回来!!\n " );
        }


        
public   override   void  House()
        
{
            Console.WriteLine(
" 单位宿舍20来平米,暂时住住吧!媳妇,看看睡马路的那哥们,不错了!!!\n " );
        }

    }


    
// ******************************************************************

    
// 外星人怎么恋爱结婚呢?让你来当一回编剧吧。。。。
     public   class  ET : Society
    
{
        
string  msg  =   " 剧本还没有写好,请自行解决! " ;

        
public   override   void  Meet()
        
{
            
throw   new  Exception(msg);
        }


        
public   override   void  Dinner()
        
{
            
throw   new  Exception(msg);
        }


        
public   override   void  Journey()
        
{
            
throw   new  Exception(msg);
        }


        
public   override   void  Wedding()
        
{
            
throw   new  Exception(msg);
        }


        
public   override   void  House()
        
{
            
throw   new  Exception(msg);
        }

    }

}

执行结果如下图:

Feedback

# re: 模版方法模式 Template Method Pattern — 穷人和富人的不同婚恋历程   回复  更多评论   

2010-06-30 06:45 by LillieGaines21
Have no enough money to buy a house? You not have to worry, just because it's real to receive the <a href="http://lowest-rate-loans.com/topics/home-loans">lowest-rate-loans.com</a> to solve all the problems. So get a financial loan to buy all you need.

# re: 模版方法模式 Template Method Pattern — 穷人和富人的不同婚恋历程   回复  更多评论   

2011-09-23 09:51 by bookmark service
Bookmarks submission supposes to be very effective tool. Thence, the social bookmarking seo service became sought by different people. It is because these options increase web traffic and generate more sales.

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


Copyright © fred