디자인 모드 시리즈 - 조합 모드

2438 단어
조합 모드는 같은 속성과 행위를 가진 여러 개의 대상을 트리 구조와 유사한 단일 대상으로 조립한다.이를 통해 각 대상 간의 차원 관계를 나타낸다.

전언


조합 모델은 구조형 모델에 속하고 여러 개의 비슷한 대상을 한데 조합함으로써 하나의 나무형의 전체-부분의 관계를 구축할 수 있다.단일 객체와 결합된 객체의 사용 방식이 동일함을 보장합니다.현실 장면에서 컴퓨터에 있는 폴더의 조회 전시와 같이 조합 모드를 연상할 수 있다.

분류도 묘사


대략

코드 구현


1. 구체적 실현
public class Employee
{
    private string name;
    private string dept;
    private int salary;
    private List subordinates;
    public Employee(string name,string dept,int sal)
    {
        this.name = name;
        this.dept = dept;
        this.salary = sal;
        subordinates = new List();
    }

    public void Add(Employee e) => subordinates.Add(e);
    public void Remove(Employee e) => subordinates.Remove(e);

    public List GetSubordinates() => this.subordinates;

    public override string ToString() => $"Employee :[name:{name},dept:{dept},salary:{salary}]";
}

2. 상부 호출
class Program
{
    static void Main(string[] args)
    {
        Employee CEO = new Employee("John", "CEO", 30000);

        Employee headSales = new Employee("Robert", "Head Sales", 20000);

        Employee headMarketing = new Employee("Michel", "Head Marketing", 20000);

        Employee clerk1 = new Employee("Laura", "Marketing", 10000);
        Employee clerk2 = new Employee("Bob", "Marketing", 10000);

        Employee salesExecutive1 = new Employee("Richard", "Sales", 10000);
        Employee salesExecutive2 = new Employee("Rob", "Sales", 10000);

        CEO.Add(headSales);
        CEO.Add(headMarketing);

        headSales.Add(salesExecutive1);
        headSales.Add(salesExecutive2);

        headMarketing.Add(clerk1);
        headMarketing.Add(clerk2);

        Console.WriteLine(CEO);
        foreach (var headEmployee in CEO.GetSubordinates())
        {
            Console.WriteLine(headEmployee);
            foreach (var employee in headEmployee.GetSubordinates())
            {
                Console.WriteLine(employee);
            }
        }

        Console.ReadKey();
    }
}

총결산


조합 모델은 각 구체적인 실현을 모두 같은 실체류로 하고 인터페이스에 의존하지 않기 때문에 의존 역치의 원칙에 위배된다.따라서 구체적인 사용 장면에서 구체적인 분석과 구체적인 대처가 필요하다.

좋은 웹페이지 즐겨찾기