面向对象

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

namespace ConsoleApplication28
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                IToken token = new ShiXianInterface("aa"+i, "a1");
                SO.Current.Store.SaveIdentity(token);
            }

            Console.WriteLine(SO.Current.Store.LoadIdentity("aa2").Identity);
        }
    }

    interface IToken
    {
        /// <summary>
        /// GET token key
        /// </summary>
        string Key
        {
            get;
        }

        /// <summary>
        /// GET user identity
        /// </summary>
        string Identity
        {
            get;
        }

        /// <summary>
        /// GET is expired
        /// </summary>
        bool Expired
        {
            get;
        }

        /// <summary>
        /// GET token add time
        /// </summary>
        DateTime RegistryTime
        {
            get;
        }
    }

    class ShiXianInterface : IToken
    {
        private string _Key;
        private string _Identity;
        private bool _Expired;
        private DateTime _RegistryTime = DateTime.Now;
        public ShiXianInterface(string Key,string Identity)
        {
            this._Key = Key;
            this._Identity = Identity;
        }
        #region IToken 成员

        public string Key
        {
            get { return _Key; }
        }

        public string Identity
        {
            get { return _Identity; }
        }

        public bool Expired
        {
            get { return _Expired; }
        }

        public DateTime RegistryTime
        {
            get { return _RegistryTime; }
        }

        #endregion
    }

    interface ISingleSignOnStore
    {
        /// save token to store
        /// </summary>
        /// <param name="token">token</param>
        void SaveIdentity(IToken token);

        /// <summary>
        /// load token from store
        /// </summary>
        /// <param name="key"></param>
        IToken LoadIdentity(string key);

        /// <summary>
        /// Delete specified token
        /// </summary>
        /// <param name="key"></param>
        void RemoveIdentity(string key);

        /// <summary>
        /// clean up expired tokens
        /// </summary>
        void RemoveExpiredTokens();
    }

    class ShiXianISingJieKou : ISingleSignOnStore
    {

        Lists list;

        public ShiXianISingJieKou()
        {
            list = new Lists();
        }

        //private static ShiXianISingJieKou _Current = new ShiXianISingJieKou();


        //public static ShiXianISingJieKou Current
        //{
        //    get
        //    {
        //        if (_Current == null)
        //        {
        //            _Current = new ShiXianISingJieKou();
        //        }
        //        return _Current;
        //    }
        //}

        #region ISingleSignOnStore 成员

        public void SaveIdentity(IToken token)
        {
            if (list.Contains(token.Key))
            {
                this.RemoveIdentity(token.Key);
            }
            list.Add(token);
        }

        public IToken LoadIdentity(string key)
        {
            return list[key];
        }

        public void RemoveIdentity(string key)
        {
            list.Remove(key) ;
        }

        public void RemoveExpiredTokens()
        {
            for (int i = 0; i < list.Count; i++)
            {
                try
                {
                    IToken token = list[i];
                    if (token.Expired)
                    {
                        list.Remove(token);
                    }
                }
                catch
                {
                }
            }
        }

        #endregion
    }

    class SO
    {
        private static SO _Current = new SO();

        public static SO Current
        {
            get
            {
                if (_Current == null)
                {
                    _Current = new SO();
                }
                return _Current;
            }
        }

        private ISingleSignOnStore _Store;



        private SO()
        {

        }
        public ISingleSignOnStore Store
        {
            get
            {
                if (_Store == null)
                {
                    _Store = new ShiXianISingJieKou();
                }
                return _Store;
            }
        }

    }

    class Lists : System.Collections.ObjectModel.KeyedCollection<string, IToken>
    {

        protected override string GetKeyForItem(IToken item)
        {
            return item.Key;
        }

        public new IToken this[string key]
        {
            get 
            { 
                return base[key];
            }
        }

        public new IToken this[int index]
        {
            get
            {
                return base[index];
            }
        }

        public void AddRange(IToken[] items)
        {
            foreach (IToken token in items)
            {
                this.Add(token);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值