디자인 모델 의 대상 지향 기초

10851 단어 디자인 모드
최근 에 디자인 모델 을 보면 서 이 책 을 너무 좋아 하고 내용 도 잘 이해 하 며 읽 기 에 중독 되 었 습 니 다. 하하, 처음에 대상 을 대상 으로 하 는 기 초 를 보 았 습 니 다. 전에 대상 을 대상 으로 하 는 기 초 를 접 했 고 대상 을 대상 으로 하 는 세 가지 특성 에 대해 진일보 한 이 해 를 했 습 니 다. 다음 에 정리 하 겠 습 니 다.
                1. 포장
                      개념: 모든 대상 은 작업 에 필요 한 모든 정 보 를 포함 하고 있 으 며, 이 특성 을 패키지 라 고 합 니 다.
                      이해: 마치 큰 상자 처럼 특정한 사물 의 공 통 된 특성 을 가지 고 있 습 니 다. 제 가 해 야 할 일 은 바로 이런 공통성 을 하나의 예 로 들 어 Cat 류 를 Tom 이라는 고양이 로 예화 하 는 것 입 니 다.
                      장점: 1. 결합 을 줄 이면 외부 에 대한 의존 과 관 계 를 줄 이 고 가능 한 한 독립 할 수 있다.2. 유형 내부 의 실현 은 자 유 롭 게 수정 할 수 있 지만 외부 에 미 치 는 영향 을 줄 일 수 있다.3. 뚜렷 한 대외 인 터 페 이 스 를 가진다.
      예: 이곳 의 두 가지 유형 은 서로 영향 을 주지 않 고 서로 의존 하지 않 는 다.
                      
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace   
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Cat cat = new Cat("dandan");
            cat.ShoutNum = 5;
            MessageBox.Show(cat.Shout());
        }
        class Cat
        {
            private string name = "";
            public Cat (string name)
            {
                this.name = name;
            }
            public Cat()
            {
                this.name = "  ";
            }
            public string Shout()
            {
                string result = "";
                for (int i = 0; i < shoutNum;i++ )
                {
                    result += " ";
                }
                return "     " + name + " ";
            }
            public int shoutNum = 3;
            public int ShoutNum
            {
                get
                {
                    return shoutNum;
                }
                set
                {
                    if (value <= 10)
                        shoutNum = value;
                    else
                        shoutNum = 10;
                }
            }
        }
        private void button2_Click_1(object sender, EventArgs e)
        {
            Dog dog = new Dog("dandan");
            dog.ShoutNum = 5;
            MessageBox.Show(dog.Shout());
        }
         class Dog
         {
             private string name = "";
             public Dog(string name)
             {
                 this.name = name;
             }
             public Dog()
             {
                 this.name = "  ";
             }
             public string Shout()
             {
                 string result = "";
                 for (int i = 0; i < shoutNum; i++)
                 {
                     result += " ";
                 }
                 return "     " + name + " ";
             }
             public int shoutNum = 3;
             public int ShoutNum
             {
                 get
                 {
                     return shoutNum;
                 }
                 set
                 {
                     if (value <= 10)
                         shoutNum = value;
                     else
                         shoutNum = 10;
                 }
             }
         }

      
    }
}

                2. 상속
                           개념: 대상 의 계승 은 일종 의 'is - a' 의 관 계 를 대표 한다. 만약 에 두 대상 의 A 와 B 가 'B 는 A' 라 고 묘사 할 수 있다 면 B 는 A 를 계승 할 수 있 음 을 나타 낸다.
                          이해: 예 를 들 어 만년필 은 문구 이 고 만년필 은 문 구 를 계승 했다. 그러나 만년필 은 문구 의 특징 을 가 지 는 동시에 그의 특성 도 있다. 예 를 들 어 만년필 물 을 사용 해 야 하고 붓끝 은 강철 로 만 든 것 이다.그리고 예 를 들 어 아들 과 아버지, 아들 은 아버지의 외모 적 특징 을 가지 지만 아들 자체 가 키 가 크 고 큰 눈 이 어야 한다. 이런 것들 이 바로 새로운 특성 이다. 아버 지 는 대상 을 대상 으로 하 는 것 을 아버지 류 나 기류 라 고 부 르 고 아들 은 자녀 류 나 파생 류 라 고 부른다.
                          장점: 모든 하위 클래스 의 공공 부분 을 부모 클래스 에 두 고 코드 를 공유 하면 중복 을 피 할 수 있 고 계승 은 수정 이나 확장 으로 이 루어 지 는 실현 이 비교적 쉽다.
                          주의: 1. 하위 클래스 는 부모 클래스 비 private 의 속성 과 기능 을 가지 고 있 습 니 다 (즉, Public 와 proctected 를 가지 고 있 습 니 다).2. 자 류 는 자신의 속성 과 기능 을 가진다. 즉, 자 류 는 부모 류 에 없 는 속성 과 기능 을 확장 할 수 있다.3. 자 류 는 자신의 방법 으로 부류 의 기능 (방법 재 작성) 을 실현 할 수 있다.
                           예: 저 는 위 에 있 는 예 들 이 대량의 중복 코드 가 있 는 것 을 보 았 다 고 생각 합 니 다. 그러면 코드 의 양 을 증가 할 뿐만 아니 라 오류 가 발생 하기 쉬 우 므 로 우 리 는 계승 을 사용 하여 그들의 공 통 된 부분 을 아버지 류 라 고 추출 하여 Cat 과 Dog 를 모두 계승 하 게 했 습 니 다.다음은 개 선 된 코드 입 니 다. 비교 해 보면 계승 역할 을 느 낄 수 있 습 니 다.
                           
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace   
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        class Animal
        {
            protected string name = "";
            public Animal (string name)
            {
                this.name = name;
            }
            public Animal ()
            {
                this.name = "  ";
            }
            protected int shoutNum = 3;
            public int ShoutNum
            {
                get
                {
                    return shoutNum;
                }
                set
                {
                    shoutNum = value;
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Cat cat = new Cat("dandan");
            cat.ShoutNum = 5;
            MessageBox.Show(cat.Shout());
        }
        class Cat:Animal 
        {
            public Cat ():base()
            { }
            public Cat (string name):base(name )
            { }
            public string Shout()
            {
                string result = "";
                for (int i = 0; i < shoutNum; i++)
                {
                    result += " ";
                }
                return "     " + name + " "+result ;
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            Dog dog = new Dog("dandan");
            dog.ShoutNum = 5;
            MessageBox.Show(dog.Shout());
        }
        class Dog : Animal
        {
            public Dog()
                : base()
            { }
            public Dog(string name)
                : base(name)
            { }
            public string Shout()
            {
                string result = "";
                for (int i = 0; i < shoutNum; i++)

                    result += " ";

                return "     " + name + " " + result;
            }
        }
    }
}

                  3. 다 형
                           개념: 서로 다른 대상 은 같은 동작 을 수행 할 수 있 지만 그들의 코드 를 통 해 이 루어 져 야 한다.
                           이해: 예 를 들 어 우리 코드 에서 예 를 들 면 고양이 와 개 는 모두 짖 지만 짖 는 소리 가 다 르 기 때문에 우 리 는 부 르 는 방법 을 쓸 수 있다. 이 방법 은 부 류 이지 만 부 류 는 고양이 와 개의 울 음소 리 를 직접 실현 할 수 없 기 때문에 부 류 를 가상 화 시 킨 다음 에 자 류 를 다시 쓰 는 방법 은 override 이다.
                          예: 이 예 에서 다 형 을 사 용 했 기 때문에 운행 결과 에 동물 신청 이 완 료 된 후에 울 음소 리 경기 에서 모든 동물 은 자동 으로 해당 하 는 울 음소 리 와 결합 하여 곧 Shout () 방법 을 다시 써 서 정확 한 울 음소 리 를 얻 을 것 이다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace   
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        class Animal
        {
            protected string name = "";
            public Animal(string name)
            {
                this.name = name;
            }
            public Animal()
            {
                this.name = "  ";
            }
            protected int shoutNum = 3;
            public int ShoutNum
            {
                get
                {
                    return shoutNum;
                }
                set
                {
                    shoutNum = value;
                }
            }
            public virtual string Shout()
            {
                return "";
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Cat cat = new Cat("dandan");
            cat.ShoutNum = 5;
            MessageBox.Show(cat.Shout());
        }
        class Cat : Animal
        {
            public Cat()
                : base()
            { }
            public Cat(string name)
                : base(name)
            { }
            public override string Shout()
            {
                string result = "";
                for (int i = 0; i < shoutNum; i++)
                
                    result += " ";
                
                return "     " + name + " " + result;
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            Dog dog = new Dog("dandan");
            dog.ShoutNum = 5;
            MessageBox.Show(dog.Shout());
        }
        class Dog : Animal
        {
            public Dog()
                : base()
            { }
            public Dog(string name)
                : base(name)
            { }
            public override string Shout()
            {
                string result = "";
                for (int i = 0; i < shoutNum; i++)

                    result += " ";

                return "     " + name + " " + result;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private Animal[] arrayAnimal;//    
        //    
        private void button3_Click(object sender, EventArgs e)
        {
            arrayAnimal = new Animal[2];
            arrayAnimal[0] = new Cat("  ");
            arrayAnimal [1]=new Dog ("  ")
            
        }

        private void button4_Click(object sender, EventArgs e)
        {
            foreach (Animal item in arrayAnimal )//    ,    Shout()
            {
                MessageBox.Show(item.Shout());
            }
        }
    
    }
}

             이 세 가지 특성 에 대한 이 해 는 아직 실천 이 향상 되 어야 하 니 여러분 의 지 도 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기