码迷,mamicode.com
首页 > 其他好文 > 详细

结构型模式(六)享元模式

时间:2015-11-24 01:00:51      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

 

一句话的概要

运用共享技术支持大量的对象。享元模式可以避免大量类似的开销。

剧情

女神跟小明,打算创建一个小团队来进行CS。他们邀请小刚加入,后面也会有更多的人加入。

我们看一下,每个人的不同之处。就是性别和名字。然而只是为了这个去创建新的对象,会造成大量的相似类的开销。

这个时候,我们就用共享技术,来避免相同的开销。下面用享元模式来构造以上剧情。

任务一:创建小团队并让他们介绍自己的方法

首先我们创建抽象类。然后我们创建小明的这个团队。

public abstract class Team
    {
        public abstract void Introduce(string strSex);
    }

    public class SomeMTeam : Team
    {
        private string name;
        public SomeMTeam(string strName) {
            this.name = strName;
        }
        public override void Introduce(string strSex)
        {
            Console.WriteLine("姓名," + name + "。性别," + strSex);
        }
    }

任务二:创建共享工厂

我们创建一个共享工厂,来实现实例共享功能。

首先,我们团队建立的时候,就有小明和女神。建立成功以后,小刚才进入团队。

public class TeamFactory
    {
        public Dictionary<string, Team> teamList = new Dictionary<string, Team>();
        public TeamFactory() {
            teamList.Add("小明", new SomeMTeam("小明"));
            teamList.Add("女神", new SomeMTeam("女神"));
        }
        public Team GetTeam(string key)
        {
            Team team = null;
            if (teamList.ContainsKey(key))
                return teamList[key] as Team;
            else
            {
                Console.WriteLine("新人加入");
                team = new SomeMTeam(key);
                return team;
            }
        }
    }

这里,我们用键值对来实现共享。提取一个获取方法,如果没有共享则新加入对象。

任务三:测试执行

我们测试执行,看能否成功。

static void Main(string[] args)
        {
            Console.WriteLine("小明和女神创建一个小团队");
            TeamFactory fa = new TeamFactory();
            Team teamM = fa.GetTeam("小明");
            teamM.Introduce("");
            Team nvS = fa.GetTeam("女神");
            nvS.Introduce("");
            Team teamG = fa.GetTeam("小刚");
            teamG.Introduce("");

            Console.ReadLine();
        }

我们看一下,执行结果

技术分享

总结

共享模式就是运用共享技术避免大量相似的开销。

常用场景:一些状态相同的对象被大量的重复使用。

选择关键点:被共享的对象是否可以从外部状态提取出来。

结构型模式(六)享元模式

标签:

原文地址:http://www.cnblogs.com/chenxygx/p/4990088.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!