Example #1
0
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("欢迎来到.net高级班vip课程,今天是设计模式的学习");
                {
                    AbstractStudent student = new StudentVip()
                    {
                        Id   = 381,
                        Name = "候鸟"
                    };
                    //RegUser
                    //付费  要预习
                    student.Study();
                    Console.WriteLine("****************************************");
                    //{
                    //    AbstractStudent studentDecorator = new BaseStudentDecorator();
                    //    studentDecorator.Study();// 学习课程,,在学习前加点东西:付费  要预习
                    //}
                    {
                        //StudentPreviewDecorator studentDecorator = new StudentPreviewDecorator(student);
                        //AbstractStudent studentDecorator = new StudentPreviewDecorator(student);//换成抽象变量
                        //studentDecorator.Study();

                        //student = new StudentHomeworkDecorator(student);

                        student = new StudentPreviewDecorator(student);//原有变量
                        student = new StudentRegDecorator(student);
                        student = new StudentPayDecorator(student);

                        student = new StudentHomeworkDecorator(student);
                        student = new StudentCommentDecorator(student);


                        //student.Study();
                        //学习之后  巩固练习homework
                        //student = new StudentHomeworkDecorator(student);
                        student.Study();
                    }
                }
                //{
                //    AbstractStudent student = new StudentFree()
                //    {
                //        Id = 381,
                //        Name = "候鸟"
                //    };
                //    student.Study();
                //    Console.WriteLine("****************************************");

                //    student = new StudentPreviewDecorator(student);//原有变量
                //    student = new StudentPayDecorator(student);
                //    student.Study();
                //}
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }
Example #2
0
        static void Main(string[] args)
        {
            try
            {
                //{
                //    AbstractStudent student = new StudentVIPInherit()
                //    {
                //        Id = 1234,
                //        Name = "Ivan"
                //    };
                //    student.Study();
                //}
                //{
                //    AbstractStudent student = new StudentVIP()
                //    {
                //        Id = 1234,
                //        Name = "Ivan"
                //    };
                //    // 比起继承,组合跟家灵活 可以为多个类型服务,但是这个调用成本更高一点
                //    // 因为即关注了 AbstractStudent 类, 又关注了StudentCombination
                //    StudentCombination studentCombination = new StudentCombination(student);
                //    studentCombination.Study();
                //}

                {
                    AbstractStudent student = new StudentFree()
                    {
                        Id   = 1234,
                        Name = "Ivan"
                    };

                    // BaseStudentDecorator baseStudentDecorator = new BaseStudentDecorator(student); // 1.

                    // AbstractStudent baseStudentDecorator = new BaseStudentDecorator(student); //2.
                    student = new BaseStudentDecorator(student);

                    student = new StudentHomeworkDecorator(student);

                    student = new StudentCommentDecorator(student);
                    // 不修改业务类, 可以随意添加功能 装饰器
                    // 还可以随意调整顺序
                    student.Study();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                throw;
            }
        }