一颗不安分的创业心

DOTA版设计模式——外观模式

外观模式,不知道你是否会碰到这样的场景,公司要开会了,由你负责布置会场,你需要做的工作有:
1.把窗帘拉下来。
2.摆好椅子。
3.降下投影幕布。
4.打开投影仪。
5...............
太烦了,有时你甚至少做了一样,别怕,如果有了外观模式就可以高枕无忧了。简单的说,外观模式就是把1~5条甚至更多的操作抽象为一个操作,那就是------------开会
在本例中,外观模式就是把游戏初始化的操作合并为一个操作,Game类中的GameStart。
此模式比较好理解,具体请see完整代码哟。
测试代码:
            DotaPatternLibrary.Facade.Game game = new DotaPatternLibrary.Facade.Game();
            game.GameStart();
完整代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using DotaCommon;

namespace DotaPatternLibrary.Facade
{
    
public class Game
    {
        
public void GameStart()
        {
            HeroFactory heroFactory 
= new HeroFactory();
            heroFactory.CreateModel();
            heroFactory.SetSkill();
            heroFactory.Maps();
            BotWildNPC botWildNPC 
= new BotWildNPC();
            botWildNPC.CreateModel();
            botWildNPC.Maps();
            Music music 
= new Music();
            music.SelectMusic();
            music.Play();
            Terrain terrain 
= new Terrain();
            terrain.RandomTerrain();
            terrain.Maps();
        }
    }

    
internal class HeroFactory
    {
        
public void CreateModel()
        {
            LandpyForm.Form.OutputResult(
"CreateHeroModel");
        }

        
public void SetSkill()
        {
            LandpyForm.Form.OutputResult(
"SetHeroSkill");
        }

        
public void Maps()
        {
            LandpyForm.Form.OutputResult(
"MapsHero");
        }
    }

    
internal class BotWildNPC
    {
        
public void CreateModel()
        {
            LandpyForm.Form.OutputResult(
"CreateBotWildNPCModel");
        }

        
public void Maps()
        {
            LandpyForm.Form.OutputResult(
"MapsBotWildNPC");
        }
    }

    
internal class Music
    {
        
public void SelectMusic()
        {
            LandpyForm.Form.OutputResult(
"SelectMusic");
        }

        
public void Play()
        {
            LandpyForm.Form.OutputResult(
"MusicPlay");
        }
    }

    
internal class Terrain
    {
        
public void RandomTerrain()
        {
            LandpyForm.Form.OutputResult(
"RandomTerrain");
        }

        
public void Maps()
        {
            LandpyForm.Form.OutputResult(
"MapsTerrain");
        }
    }
}
posted @ 2009-07-26 23:03  pangxiaoliang[北京]流浪者  阅读(203)  评论(0编辑  收藏  举报
小豆芽之父