Zoe

装饰器模式

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

namespace DecoratorPattern.Decorator
{
    /// <summary>
    /// 装饰器的基类
    /// 也是一个学员
    /// 因为 继承了抽象类
    /// </summary>
    public class BaseStudentDecorator : AbstractStudent
    {
        private AbstractStudent _Student = null;
        public BaseStudentDecorator(AbstractStudent student)
        {
            this._Student = student;
        }
        public override void Show()
        {
            this._Student.Show();
            //Console.WriteLine("****************");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern.Decorator
{
    /// <summary>
    /// 具体的装饰器
    /// 也是一个学员
    /// 因为 继承了BaseStudentDecorator,也就是间接继承了抽象类
    /// </summary>
    public class StudentCoreDecorator : BaseStudentDecorator
    {
        public StudentCoreDecorator(AbstractStudent student)
            : base(student)//表示调用父类的带参数构造函数
        {

        }

        /// <summary>
        /// 多重override
        /// </summary>
        public override void Show()
        {
            base.Show();//调用父类的show方法
            Console.WriteLine("学习核心语法的内容。。。。");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern.Decorator
{
    /// <summary>
    /// 具体的装饰器
    /// 也是一个学员
    /// 因为 继承了BaseStudentDecorator,也就是间接继承了抽象类
    /// </summary>
    public class StudentDesignDecorator : BaseStudentDecorator
    {
        public StudentDesignDecorator(AbstractStudent student)
            : base(student)//表示调用父类的带参数构造函数
        {

        }

        /// <summary>
        /// 多重override
        /// </summary>
        public override void Show()
        {
            base.Show();//调用父类的show方法
            Console.WriteLine("学习架构设计的内容。。。。");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern.Decorator
{
    /// <summary>
    /// 具体的装饰器
    /// 也是一个学员
    /// 因为 继承了BaseStudentDecorator,也就是间接继承了抽象类
    /// </summary>
    public class StudentFrameworkDecorator : BaseStudentDecorator
    {
        public StudentFrameworkDecorator(AbstractStudent student)
            : base(student)//表示调用父类的带参数构造函数
        {

        }

        /// <summary>
        /// 多重override
        /// </summary>
        public override void Show()
        {
            base.Show();//调用父类的show方法
            Console.WriteLine("学习框架组件的内容。。。。");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern.Decorator
{
    /// <summary>
    /// 具体的装饰器
    /// 也是一个学员
    /// 因为 继承了BaseStudentDecorator,也就是间接继承了抽象类
    /// </summary>
    public class StudentPayDecorator : BaseStudentDecorator
    {
        public StudentPayDecorator(AbstractStudent student)
            : base(student)//表示调用父类的带参数构造函数
        {

        }

        /// <summary>
        /// 多重override
        /// </summary>
        public override void Show()
        {
            Console.WriteLine("通过腾讯课堂在线付费报名。。。。");

            base.Show();//调用父类的show方法
            
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern.Decorator
{
    /// <summary>
    /// 具体的装饰器
    /// 也是一个学员
    /// 因为 继承了BaseStudentDecorator,也就是间接继承了抽象类
    /// </summary>
    public class StudentProjectDecorator : BaseStudentDecorator
    {
        public StudentProjectDecorator(AbstractStudent student)
            : base(student)//表示调用父类的带参数构造函数
        {

        }

        /// <summary>
        /// 多重override
        /// </summary>
        public override void Show()
        {
            base.Show();//调用父类的show方法
            Console.WriteLine("学习项目实战的内容。。。。");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern
{
    public abstract class AbstractStudent
    {
        public int Id { get; set; }
        public string Name { get; set; }


        public abstract void Show();
    }
}
using DecoratorPattern.Decorator;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern
{
    /// <summary>
    /// 装饰器模式
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("今天是设计模式的学习");
                AbstractStudent student = new StudentVip()
                {
                    Id = 381,
                    Name = "秋叶"
                };
                //student.Show();

                //int i = 0;
                //i = 1;
                //AbstractStudent student2 = new BaseStudentDecorator(student);
                //student2.Show();

                student = new BaseStudentDecorator(student);//覆盖了
                //student.Show();

                //AbstractStudent student3 = new StudentCoreDecorator(student);
                //student3.Show();

                student = new StudentPayDecorator(student);

                student = new StudentCoreDecorator(student);
                student = new StudentFrameworkDecorator(student);
                student = new StudentProjectDecorator(student);
                student = new StudentDesignDecorator(student);

                //student = new StudentPayDecorator(student);

                student.Show();


            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DecoratorPattern
{
    /// <summary>
    /// 一个普通的vip学员
    /// </summary>
    public class StudentVip : AbstractStudent
    {
        public override void Show()
        {
            Console.WriteLine("{0} is a vip student...", base.Name);
        }
    }
}

工厂模式

using FactoryPattern.War3.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory.Abstract
{
    /// <summary>
    /// 产品簇
    /// </summary>
    public abstract class AbstractFactory
    {
        public abstract IArmy CreateArmy();
        public abstract IRace CreateRace();

        //public abstract IHero CreateHero();
    }
}
using FactoryPattern.War3.Interface;
using FactoryPattern.War3.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory.Abstract
{
    public class AHumanFactory : AbstractFactory
    {
        public override IArmy CreateArmy()
        {
            return new HumanArmy();
        }
        public override IRace CreateRace()
        {
            return new Human("");
        }
    }
}
using FactoryPattern.War3.Interface;
using FactoryPattern.War3.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory.Abstract
{
    public class AUndeadFactory : AbstractFactory
    {
        public override IArmy CreateArmy()
        {
            return new UndeadArmy();
        }
        public override IRace CreateRace()
        {
            return new Undead();
        }
    }
}
using FactoryPattern.War3.Interface;
using FactoryPattern.War3.Service;
using FactoryPattern.War3.ServiceExtend;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory.FactoryMethod
{
    public class FiveFactory : IFactory
    {
        public IRace CreateRace()
        {
            return new Five();
        }
    }
}
using FactoryPattern.War3.Interface;
using FactoryPattern.War3.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory.FactoryMethod
{
    public class HumanFactory : IFactory
    {
        public IRace CreateRace()
        {
            return new Human("");
        }
    }
}
using FactoryPattern.War3.Interface;
using FactoryPattern.War3.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory.FactoryMethod
{
    public interface IFactory
    {
        IRace CreateRace();
    }
}
using FactoryPattern.War3.Interface;
using FactoryPattern.War3.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory.FactoryMethod
{
    public class NEFactory : IFactory
    {
        public IRace CreateRace()
        {
            return new NE();
        }
    }
}
using FactoryPattern.War3.Interface;
using FactoryPattern.War3.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory.FactoryMethod
{
    public class ORCFactory : IFactory
    {
        public IRace CreateRace()
        {
            return new ORC();
        }
    }
}
using FactoryPattern.War3.Interface;
using FactoryPattern.War3.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory.FactoryMethod
{
    public class UndeadFactory : IFactory
    {
        public IRace CreateRace()
        {
            return new Undead();
        }
    }
}
using FactoryPattern.War3.Interface;
using FactoryPattern.War3.Service;
using FactoryPattern.War3.ServiceExtend;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory.SimpleFactory
{
    public class ObjectFactory
    {
        public static IRace CreateInstance(RaceType type)
        {
            IRace iRace = null;
            switch (type)
            {
                case RaceType.Human:
                    iRace = new Human("123");
                    break;
                case RaceType.NE:
                    iRace = new NE();
                    break;
                case RaceType.ORC:
                    iRace = new ORC();
                    break;
                case RaceType.Undead:
                    iRace = new Undead();
                    break;
                case RaceType.Five:
                    iRace = new Five();
                    break;
                default:
                    throw new Exception("wrong RaceType");
            }
            return iRace;
        }

        //简单工厂+配置文件

        //简单工厂+配置文件+反射
    }

    public enum RaceType
    {
        Human = 0,
        NE = 1,
        ORC = 2,
        Undead = 3,
        Five = 4
    }
}
using Factory.Abstract;
using Factory.FactoryMethod;
using Factory.SimpleFactory;
using FactoryPattern.War3.Interface;
using FactoryPattern.War3.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Factory
{
    /// <summary>
    /// 三大工厂
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("欢迎来到.net高级班vip课程,今天是设计模式的学习");
                {
                    IRace race = ObjectFactory.CreateInstance(RaceType.Human);// new Human();
                    race.ShowKing();
                }
                {
                    IRace race = ObjectFactory.CreateInstance(RaceType.ORC);// new Human();
                    race.ShowKing();
                }
                {
                    IRace race = ObjectFactory.CreateInstance(RaceType.NE);// new Human();
                    race.ShowKing();
                }

                {
                    Human human = new Human("123");

                    IFactory facetory = new HumanFactory();
                    IRace race = facetory.CreateRace();
                    race.ShowKing();
                }
                {
                    //Human human = new Human();

                    IFactory facetory = new FiveFactory();
                    IRace race = facetory.CreateRace();
                    race.ShowKing();
                }
                {
                    AbstractFactory factory = new AHumanFactory();
                    IRace race = factory.CreateRace();
                    race.ShowKing();
                    IArmy army = factory.CreateArmy();
                    army.BuildArmy();
                }
                {
                    AbstractFactory factory = new AUndeadFactory();
                    IRace race = factory.CreateRace();
                    race.ShowKing();
                    IArmy army = factory.CreateArmy();
                    army.BuildArmy();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

单例模式

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

namespace SingletonPattern
{
    /// <summary>
    /// 
    /// </summary>
    class Program
    {

        //public static Singleton singleton = new Singleton();
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("今天是单例模式");

                TaskFactory taskFactory = new TaskFactory();
                List<Task> taskList = new List<Task>();


                //for (int i = 0; i < 5; i++)
                //{
                //    taskList.Add(taskFactory.StartNew(() =>
                //     {
                //         Singleton singleton = Singleton.CreateInstance(); //new Singleton();
                //         singleton.Write();
                //     }));
                //}
                //Task.WaitAll(taskList.ToArray());
                //Console.WriteLine("**********************************************************");
                //for (int i = 0; i < 5; i++)
                //{
                //    taskFactory.StartNew(() =>
                //    {
                //        Singleton singleton = Singleton.CreateInstance(); //new Singleton();
                //        singleton.Write();
                //    });
                //}
                {
                    Singleton singleton = Singleton.CreateInstance();
                }

                {
                    for (int i = 0; i < 10000; i++)
                    {
                        taskList.Add(taskFactory.StartNew(() =>
                         {
                             Singleton singleton = Singleton.CreateInstance(); //new Singleton();
                             singleton.Write();
                         }));
                    }
                    Task.WaitAll(taskList.ToArray());
                }
                {
                    Singleton singleton = Singleton.CreateInstance();
                    singleton.ShowI();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }

        //method1
        //method2
        //method3
        //method4
        //method5
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace SingletonPattern
{
    /// <summary>
    /// 构造很麻烦  很耗资源
    /// </summary>
    public class Singleton
    {
        private Singleton()
        {
            long lResult = 0;
            for (int i = 0; i < 10000000; i++)
            {
                lResult += i;
            }
            Thread.Sleep(1000);
            Console.WriteLine("{0}被构造...", this.GetType().Name);
        }

        private static Singleton _Singleton = null;
        private static object Singleton_Lock = new object();
        public static Singleton CreateInstance()
        {
            if (_Singleton == null)
            {
                lock (Singleton_Lock)
                {
                    Console.WriteLine("进入lock,wait一下");
                    Thread.Sleep(100);
                    if (_Singleton == null)
                    {
                        _Singleton = new Singleton();
                    }
                }
            }
            return _Singleton;
        }



        private int _i = 0;


        public void Write()
        {
            
            //Console.WriteLine("这里是write a file");
            this._i++;
        }

        public void ShowI()
        {
            Console.WriteLine(this._i);
        }

    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace SingletonSecondPattern
{
    /// <summary>
    /// 构造很麻烦  很耗资源
    /// </summary>
    public class SingletonSecond
    {
        private SingletonSecond()
        {
            long lResult = 0;
            for (int i = 0; i < 10000000; i++)
            {
                lResult += i;
            }
            Thread.Sleep(1000);
            Console.WriteLine("{0}被构造...", this.GetType().Name);
        }

        private static SingletonSecond _SingletonSecond = null;

        /// <summary>
        /// 静态构造函数:只能有一个,无参数的,程序无法调用
        /// 由CLR保证,在程序第一次使用该类之前被调用,而且只调用一次
        /// </summary>
        static SingletonSecond()
        {
            _SingletonSecond = new SingletonSecond();
        }


        public static SingletonSecond CreateInstance()
        {
            return _SingletonSecond;
        }



        private int _i = 0;


        public void Write()
        {
            
            //Console.WriteLine("这里是write a file");
            this._i++;
        }

        public void ShowI()
        {
            Console.WriteLine(this._i);
        }

    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace SingletonThirdPattern
{
    /// <summary>
    /// 构造很麻烦  很耗资源
    /// </summary>
    public class SingletonThird
    {
        private SingletonThird()
        {
            long lResult = 0;
            for (int i = 0; i < 10000000; i++)
            {
                lResult += i;
            }
            Thread.Sleep(1000);
            Console.WriteLine("{0}被构造...", this.GetType().Name);
        }

        /// <summary>
        /// 静态变量:由CLR保证,在程序第一次使用该类之前被调用,而且只调用一次
        /// </summary>
        private static SingletonThird _SingletonThird = new SingletonThird();


        public static SingletonThird CreateInstance()
        {
            return _SingletonThird;
        }



        private int _i = 0;


        public void Write()
        {

            //Console.WriteLine("这里是write a file");
            this._i++;
        }

        public void ShowI()
        {
            Console.WriteLine(this._i);
        }

    }
}

 

posted on 2018-03-23 15:27  口袋里的SKY  阅读(232)  评论(0编辑  收藏  举报