c#面向对象 工厂设计模式之类的

字段就是成员变量
属性:使用 访问器(accessors) 让私有域的值可被读写或操作。
访问器:get set
自动属性就是写的时候只写一个属性,并不写字段,一般情况下也不实现。当有个字段不需要限制访问,为了编程习惯又不想写成公有字段,同时有懒得主动写那个字段名的时候,就使用自动属性吧。

工厂设计模式
工厂类 完成 输入想要的类名 返回相应对象 的操作。

工厂类

	class ShapeFactory
    {
        public Shape createShape(String type)
        {
            if (type.Equals("circle"))
            {
                Console.WriteLine("输入半径:");
                double r = Convert.ToDouble(Console.ReadLine());
                return new Circle(r);
            }
            else if (type.Equals("triangle"))
            {
                Console.WriteLine("输入三边长:");
                int a = Convert.ToInt32(Console.ReadLine());
                int b = Convert.ToInt32(Console.ReadLine());
                int c = Convert.ToInt32(Console.ReadLine());
                return new Triangle(a, b, c);
            }
            else if (type.Equals("rectangle"))
            {
                Console.WriteLine("输入长和宽:");
                int a = Convert.ToInt32(Console.ReadLine());
                int b = Convert.ToInt32(Console.ReadLine());
                return new Rectangle(a, b);
            }
            else
                return null;
        }


        static void Main(string[] args)
        {
            ShapeFactory sf = new ShapeFactory();
            Shape[] shapes = new Shape[10];
            double sumarea = 0;
            for(int i = 0; i < 5; i++)
            {
                Console.WriteLine("输入你要的形状名:");
                shapes[i]=sf.createShape(Console.ReadLine());
                sumarea += shapes[i].Area();
            }
            Console.WriteLine("面积之和为:{0}", sumarea);
            Console.ReadKey();
        }
    }

形状类,有计算面积和检查是否合法两个方法

	abstract class Shape
    {
        abstract public double Area();
        abstract public bool Check();
    }

    class Circle : Shape
    {
        private double radius;
        public double Radius { set; get; }
        public Circle(double radius)
        {
            this.radius = radius;
        }

        override public double Area()
        {
            return 0.5 * 3.1415926 * radius * radius;
        }

        override public bool Check()
        {
            if (radius == 0)
                return false;
            else
                return true;
        }
    }

    class Triangle : Shape
    {
        private int side1, side2, side3;
        public int Side1 { set; get; }
        public int Side2 { set; get; }
        public int Side3 { set; get; }
        public Triangle(int a, int b, int c)
        {
            this.side1 = a;
            this.side2 = b;
            this.side3 = c;
            if (Check())
                Console.WriteLine("三角形构造成功。");
            else
                Console.WriteLine("三角形构造失败。");
        }

        override public bool Check()
        {
            if (side1 + side2 > side3 && side1 + side3 > side2 && side2 + side3 > side1)
            {
                return true;
            }
            else
                return false;
        }

        override public double Area()
        {
            double p = (side1 + side2 + side3) / 2;
            return Math.Sqrt(p * (p - side1) * (p - side2) * (p - side3));
        }

    }

    class Rectangle : Shape
    {
        private int a, b;
        public int A { set; get; }
        public int B { set; get; }
        public Rectangle(int a,int b)
        {
            this.a = a;
            this.b = b;
        }
        override public bool Check()
        {
            if (a > 0 && b > 0)
                return true;
            else
                return false;
        }
        override public double Area()
        {
            return a * b;
        }
    }
发布了36 篇原创文章 · 获赞 0 · 访问量 1759

猜你喜欢

转载自blog.csdn.net/Oneiro_qinyue/article/details/104606130
今日推荐