⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 program.cs

📁 GOF23种设计模式详细例子!附有详细的代码噢!
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;

namespace CompositeExample
{
    class Program
    {
        static void Main(string[] args)
        {
            Element server1 = new GameServer("GS1", "192.168.0.1");
            server1.Add(new GameService("Lobby1", 1, "S5Lobby1"));
            server1.Add(new GameService("Gate1", 2, "S5Gate1"));
            server1.Add(new GameService("DataExchange1", 3, "S5DataExchange1"));
            server1.Add(new GameService("Rank1", 4, "S5Rank1"));
            server1.Add(new GameService("Log1", 5, "S5Log1"));
            Element server2 = new GameServer("GS2", "192.168.0.2");
            server2.Add(new GameService("Lobby2", 1, "S5Lobby2"));
            server2.Add(new GameService("Gate2", 2, "S5Gate2"));
            server2.Add(new GameService("DataExchange2", 3, "S5DataExchange1"));
            server2.Add(new GameService("Rank2", 4, "S5Rank2"));
            server2.Add(new GameService("Log2", 5, "S5Log2"));
            Element area = new GameArea("电信1区");
            area.Add(server1);
            area.Add(server2);
            area.Display();
            area.Start();
            area.Stop();
        }
    }

    abstract class Element
    {
        protected string name;

        public Element(string name)
        {
            this.name = name;
        }

        public abstract void Add(Element element);
        public abstract void Remove(Element element);
        public abstract void Display();
        public abstract void Start();
        public abstract void Stop();
    }

    class GameService : Element, IComparable<GameService>
    {
        private int serviceType;
        private string serviceName;

        public GameService(string name, int serviceType, string serviceName) 
            : base (name)
        {
            this.serviceName = serviceName;
            this.serviceType = serviceType;
        }

        public override void Add(Element element)
        {
            throw new ApplicationException("xxx");
        }

        public override void Remove(Element element)
        {
            throw new ApplicationException("xxx");
        }

        public override void Display()
        {
            Console.WriteLine(string.Format("name:{0},serviceType:{1},serviceName:{2}", name, serviceType, serviceName));
        }

        public override void Start()
        {
            Console.WriteLine(string.Format("{0} started", name));
        }

        public override void Stop()
        {
            Console.WriteLine(string.Format("{0} stopped", name));
        }

        public int CompareTo(GameService other)
        {
            return other.serviceType.CompareTo(serviceType);
        }
    }

    class GameServer : Element
    {
        private string serverIP;
        private List<GameService> serviceList = new List<GameService>();

        public GameServer(string name, string serverIP)
            : base(name)
        {
            
            this.serverIP = serverIP;
        }
        
        public override void Add(Element element)
        {
            serviceList.Add((GameService)element);
        }

        public override void Remove(Element element)
        {
            serviceList.Remove((GameService)element);
        }

        public override void Display()
        {
            Console.WriteLine(string.Format("{0}{1}({2}){3}", new string('+', 10), name, serverIP, new string('+', 10)));
            foreach (Element element in serviceList)
            {
                element.Display();
            }
        }

        public override void Start()
        {
            serviceList.Sort();
            Console.WriteLine("=============Starting the whole " + name + "=============");
            for (int i = 0; i < serviceList.Count; i++ )
            {
                serviceList[i].Start();
            }
            Console.WriteLine("=============The whole " + name + " started=============");
        }

        public override void Stop()
        {
            Console.WriteLine("=============Stopping the whole " + name + "=============");
            for (int i = serviceList.Count -1; i >= 0; i--)
            {
                serviceList[i].Stop();
            }
            Console.WriteLine("=============The whole " + name + " stopped=============");
        }
    }

    class GameArea : Element
    {
        private List<GameServer> serverList = new List<GameServer>();

        public GameArea(string name)
            : base(name) { }

        public override void Add(Element element)
        {
            serverList.Add((GameServer)element);
        }

        public override void Remove(Element element)
        {
            serverList.Remove((GameServer)element);
        }

        public override void Display()
        {
            Console.WriteLine(new string('=',20));
            Console.WriteLine("       " + name);
            Console.WriteLine(new string('=', 20));
            foreach (Element element in serverList)
            {
                element.Display();
            }
        }

        public override void Start()
        {
            Console.WriteLine("=============Starting the whole " + name + "=============");
            foreach (Element element in serverList)
            {
                element.Start();
            }
            Console.WriteLine("=============The whole " + name + " started=============");
        }

        public override void Stop()
        {
            Console.WriteLine("=============Stopping the whole " + name + "=============");
            foreach (Element element in serverList)
            {
                element.Stop();
            }
            Console.WriteLine("=============The whole " + name + " stopped=============");
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -