代码实现接口抽象类

来源:互联网 发布:彩票源码程序 编辑:程序博客网 时间:2024/04/28 11:43

新建项目-〉VISUALC#-〉Windows-〉空项目

下面的写法应该是很不科学

这里我们只是为了便于理解

 

 

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

namespace Project1
{
    class Head_First
    {
        public abstract class Duck
        {
            protected FlyBehavior flyBehavior;                    
            protected QuackBehavior quackBehavior;                   //接口定义的两个变量

            public Duck()
            {
            }

            public abstract void display();                 //抽象方法,继承里面必须用override重写

            public void performFly()                     //两个方法
            {
                flyBehavior.fly();
            }

            public void performQuack()
            {
                quackBehavior.quack();
            }

            public void setFlyBehavior(FlyBehavior fb)   //在鸭子子类中通
                                                                               //过“设定方法(setter method)”来设定鸭子的行为,而不是在鸭子的构造器内实例化
            {
                flyBehavior = fb;
            }

            public void swim()
            {
                Console.WriteLine("All ducks float, even decoys!");
            }
        }

        public interface FlyBehavior   //接口
        {
            void fly();
        }
        public class FlyWithWings : FlyBehavior  //继承接口
        {
            public void fly()
            {
                Console.WriteLine("I'm flying!");
            }
        }
        public class FlyNoWay : FlyBehavior
        {
            public void fly()
            {
                Console.WriteLine("I'm not flying!");
            }
        }
        public class FlyRocketPowered : FlyBehavior     //定义新的方法
        {
            public void fly()
            {
                Console.WriteLine("I'm flying with a rocket");
            }
        }

        public interface QuackBehavior
        {
            void quack();
        }

        public class Quack : QuackBehavior
        {
            public void quack()
            {
                Console.WriteLine("Quack");
            }
        }

        public class MuteQuack : QuackBehavior
        {
            public void quack()
            {
                Console.WriteLine("<<Silence>>");
            }
        }

        public class Squeak : QuackBehavior
        {
            public void quack()
            {
                Console.WriteLine("Squeak");
            }
        }

        public class MallardDuck : Duck
        {

            public MallardDuck()
            {
                quackBehavior = new Quack();     //用类实现接口
                flyBehavior = new FlyWithWings();
            }
            public override void display()
            {
                Console.WriteLine("I'm real Mallard duck");
            }
        }

        public class ModelDuck : Duck
        {
            public ModelDuck()
            {
                quackBehavior = new Quack();
                flyBehavior = new FlyNoWay();
            }
            public override void display()
            {
                Console.WriteLine("I'm real Model Duck");
            }
        }

 

       
        static void Main(string[] args)
        {
        //    Duck mallard = new MallardDuck();
        //    mallard.performQuack();            //在Duck里面写好的方法,在MallardDuck用接口实现
        //    mallard.performFly();
        //    mallard.display();
        //    Console.ReadLine();
            Duck modelduck =new ModelDuck();
            modelduck.performQuack();
            modelduck.performFly();
            modelduck.setFlyBehavior(new FlyRocketPowered());
            modelduck.performFly();
            Console.ReadLine();
        }
    }
}

原创粉丝点击