コード例 #1
0
        static void Main(string[] args)
        {
            var figures = new List <Figure> {
                new Circle(10), new Square(20), new Triangle(3, 4, 5)
            };

            var areaVisitor  = new AreaVisitor();
            var colorVisitor = new ColorizeVisitor();
            var drawVisitor  = new DrawVisitor();

            foreach (var figure in figures)
            {
                figure.AcceptColorizeVisitor(Color.Blue, colorVisitor);
                figure.AcceptDrawVisitor(0, 0, drawVisitor);
                figure.AcceptGetAreaVisitor(areaVisitor);
            }
            //Output:
            //Drawing Circle on position 0, 0
            //Circle's area: 314,159265358979
            //Drawing Square on position 0, 0
            //Square's area: 400
            //Drawing Triangle on position 0, 0
            //Triangle's area: 6
        }
コード例 #2
0
ファイル: EntryPoint.cs プロジェクト: hexlify/patterns
        public void Calculate_Area(IElement element, double expectedValue)
        {
            var visitor = new AreaVisitor();

            element.Accept(visitor).Should().BeApproximately(expectedValue, 0.01);
        }
コード例 #3
0
        static void Main(string[] args)
        {
            IShape        shape;
            IShapeVisitor visitor;

            do
            {
chooseOperation:
                Console.WriteLine("Что вы хотите посчитать? 1 - площадь, 2 - объем.");
                switch (Console.ReadLine().Trim())
                {
                case "1":
                    visitor = new AreaVisitor();
                    break;

                case "2":
                    visitor = new VolumeVisitor();
                    break;

                default:
                    Console.WriteLine("Неверный ввод, попробуйте еще раз.");
                    goto chooseOperation;
                }
chooseShape:
                Console.WriteLine("Что вы хотите посчитать? 1 - куб, 2 - сфера, 3 - параллелепипед.");
                switch (Console.ReadLine().Trim())
                {
                case "1":
                    double side;
                    Console.Write("Введите сторону куба: ");
                    while (!double.TryParse(Console.ReadLine().Trim(), out side))
                    {
                        Console.WriteLine("Введите число!");
                    }
                    shape = new Cube(side);
                    break;

                case "2":
                    double radius;
                    Console.Write("Введите радиус сферы: ");
                    while (!double.TryParse(Console.ReadLine().Trim(), out radius))
                    {
                        Console.WriteLine("Введите число!");
                    }
                    shape = new Sphere(radius);
                    break;

                case "3":
                    double a, b, c;
                    Console.WriteLine("Введите поочередно три стороны: ");
                    while (!double.TryParse(Console.ReadLine().Trim(), out a))
                    {
                        Console.WriteLine("Введите число!");
                    }
                    while (!double.TryParse(Console.ReadLine().Trim(), out b))
                    {
                        Console.WriteLine("Введите число!");
                    }
                    while (!double.TryParse(Console.ReadLine().Trim(), out c))
                    {
                        Console.WriteLine("Введите число!");
                    }
                    shape = new Parallelepiped(a, b, c);
                    break;

                default:
                    Console.WriteLine("Неверный ввод, попробуйте еще раз.");
                    goto chooseShape;
                }
                Console.WriteLine($"Ответ: {shape.Accept(visitor)}\n");

                Console.WriteLine("Введите 0 для выхода, иначе нажмите Enter");
                if (Console.ReadLine().Trim() == "0")
                {
                    break;
                }
            } while (true);
        }