开闭原则

本文介绍开闭原则的应用,通过抽象类实现不同游戏单词队列的扩展,避免了使用条件判断带来的复杂性和维护困难。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开闭原则:

软件实体应当对扩展开放(增加新的类),而对修改源代码关闭,

适用于:

if(type=="pie") peichat.display();

if(type=="bar") barChart.display()

实现开闭原则的关键是实现抽象化,并且从抽象化导出具体化实现,我们通常添加抽象层来实现,

适用于:

下面是我模仿写的代码:

//采用开闭原则,就是不一样
public class WordQueue
{
    private static AbstractGetWordQueue m_getWordQueue;
    //这里我简化一下类,完全可以简化
    //public void SetGetWordQueue(AbstractGetWordQueue getWordQueue)
    //{
    //    m_getWordQueue = getWordQueue;
    //}
    //public Queue<WordsInfo> _GetWordQueue()
    //{
    //    return m_getWordQueue._GetWordQueue();
    //}
    /// <summary>
    ///返回一个单词队列
    /// </summary>
    /// <param name="getWordQueue"> 给予想要得到哪一个游戏的队列</param>
    /// <returns></returns>
    public static Queue<WordsInfo> _GetWordQueue(AbstractGetWordQueue getWordQueue)
    {
        m_getWordQueue = getWordQueue;
        return m_getWordQueue._GetWordQueue();
    }
}
//由于每一个游戏都有他自己的队列,所以当有很多队列时我们就需要不停的If判断,这样很愚蠢
public abstract class AbstractGetWordQueue
{
    protected Queue<WordsInfo> m_wordQueue;


    public AbstractGetWordQueue()
    {
        m_wordQueue = new Queue<WordsInfo>();
    }


    public abstract Queue<WordsInfo> _GetWordQueue();//按照3,4,5的顺序得到一个长度为100的单词序列
    //获得某个单词列表里指定数量的单词
    protected void _AddSomeWords(WordsInfo[] wordList, int count)
    {
        int length = wordList.Length;
        for (int i = 0; i < count; i++)
        {
            m_wordQueue.Enqueue(wordList[UnityEngine.Random.Range(0, length)]);
        }
    }
}
//第一个游戏的队列
public class GetWordQueueInGame1:AbstractGetWordQueue
{
    //这种模式是3,3,,3,4,,n,5的那种
    public override Queue<WordsInfo> _GetWordQueue()
    {
        //加入3个数字进入队列
        base._AddSomeWords(WordParse.Instance._GetWordLength(3), 1);
        base._AddSomeWords(WordParse.Instance._GetWordLength(4), 1);
        //AddSomeWords(m_wordLengthIs5, 2);
        return base.m_wordQueue;
    }
}
//第二个游戏的队列
public class GetWordQueueInGame2:AbstractGetWordQueue
{
    //这种模式是3,3,,3,4,,n,5的那种
    public override Queue<WordsInfo> _GetWordQueue()
    {
        //加入3个数字进入队列
        base._AddSomeWords(WordParse.Instance._GetWordLength(5), 1);
        base._AddSomeWords(WordParse.Instance._GetWordLength(6), 1);
        //AddSomeWords(m_wordLengthIs5, 2);
        return m_wordQueue;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值