실전 템 플 릿 방법 모드 - 다 중 태 도 를 조금 알 아 보기

13686 단어 디자인 모드
선언:
    한 달 동안 의 디자인 모델 을 배 워 서 마침내 도움 이 되 었 다.조합 조회 의 세 개의 창 을 실현 할 때 저 는 지혜 롭 게 템 플 릿 방법 모델 을 선택 하여 많은 일 을 과감하게 절약 하고 '다 형' 의 맛 을 조금 느 꼈 습 니 다.그것 은 상당히 통쾌 하 다 ~
    지금 은 아버 지 를 위해 싸 우 는 시대 입 니 다. 좋 은 아버 지 는 당신 을 적어도 20 년 은 덜 분투 하 게 할 수 있 습 니 다.(⊙ o ⊙) 내 가 왜 이런 말 을 했 을 까? 사실 다 태 도 는 이 이치 다.완벽 한 부모 클래스 는 N 여러 개의 하위 클래스 로 하여 금 그것 을 계승 하 게 할 수 있다. 그러면 중복 되 는 코드 를 많이 줄 이 고 하위 클래스 는 훨씬 가 벼 워 보인다.중 복 된 것 을 부류 에 봉 하여 하나의 틀 과 같은 것 을 정의 한 다음 에 서로 다른 상황 과 다른 결 과 를 통 해 구체 적 인 실현 을 하위 클래스 로 지연 시킨다.이렇게 말 하면, 너 는 오늘 의 주 제 를 생각 하지 못 했 니?먼저 나의 템 플 릿 방법 이 어떻게 실현 되 었 는 지 알 아 보 자.
1. 템 플 릿 방법의 실현
    
    1. 템 플 릿 방법 "3W1H"
      1W 는 무엇 입 니까? 작업 중인 알고리즘 의 골격 을 정의 하고 일부 절 차 를 하위 클래스 로 지연 시 킵 니 다.하위 클래스 는 알고리즘 의 구 조 를 바 꾸 지 않 고 이 알고리즘 의 특정한 절 차 를 다시 정의 할 수 있다.
      2W 는 왜 사용 합 니까? ① 변 하지 않 는 행 위 를 초 류 로 이동 시 켜 좋 은 코드 재 활용 플랫폼 을 제공 합 니 다.
               ② 반복 되 는 변 함 없 는 행동 의 얽 매 임 에서 벗 어 나 도록 도와 준다.
      3W 는 언제 사용 합 니까? 우 리 는 특정한 세부 적 인 차원 에서 일치 하 는 과정 이나 일련의 절 차 를 완성 해 야 하지만 그 개별 절 차 는 더욱 상세 한 차원 에서 실현 되 는 것 이 다 를 수 있 습 니 다. 우 리 는 보통 템 플 릿 방법 모델 로 처리 하 는 것 을 고려 합 니 다.
    2. '변' 과 '변 하지 않 음' 을 분석한다.
    3W 를 보고 1H 를 실제 분석 해 조합 조회 에서 어떻게 실현 하 는 지 살 펴 보 자.먼저 세 창문 의 공통성 과 개성 을 분석 해 보 자.
    공통성: 연산 자가 일치 하고 조합 관계 가 일치 하 며 조합 조회 문자열 연결 프레임 워 크 가 같 습 니 다 (model 에 넣 어 패키지). 텍스트 의 완성 여 부 를 판단 합 니 다.
    개성: 필드 이름, 표 이름, 표 디자인 (필드 와 내용)
    3. 코드 구현 (조합 조회 부분 코드)
    
    공 통 된 것 을 모두 한데 놓 고 하나의 부모 창문 으로 포장 하고 개성 있 는 것 을 모두 추상 적 인 방법 으로 써 서 자 류 를 다시 쓰 게 하여 다 형 성 을 실현 한다.여기 서 더욱 세부 적 인 변화 가 필요 한 부분 을 추상 적 인 방법 (여기 서 세 가지 추상 적 인 방법 을 정의 했다) 으로 써 서브 창 에서 구체 적 으로 실현 했다.
Imports Model
Imports BLL
'************************************************************
'   :frmCheck  
'    :UI 
'  :        ,                 
'    :2014-10-21
'  :  
'  :**
'**************************************************************

Public Class frmCheck
    Protected group As New ModelGroup   '          
    Protected Sub textInfo()             '      
        ReDim Preserve arrayContorl(10)
        arrayContorl(0) = New Term(cboField1, "")
        arrayContorl(1) = New Term(cboField2, "")
        arrayContorl(2) = New Term(cboField3, "")
        arrayContorl(3) = New Term(cboOp1, "")
        arrayContorl(4) = New Term(cboOp2, "")
        arrayContorl(5) = New Term(cboOp2, "")
        arrayContorl(6) = New Term(txt1, "")
        arrayContorl(7) = New Term(txt2, "")
        arrayContorl(8) = New Term(txt3, "")
        arrayContorl(9) = New Term(cboZuhe1, "")
        arrayContorl(10) = New Term(cboZuhe2, "")
    End Sub
    Protected Sub frmGroupQuery_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        '         
        DataGridView1.AllowUserToAddRows = False
        DataGridView1.ReadOnly = True
        DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect

        Dim i As Integer
        For i = 0 To DataGridView1.Columns.Count - 1
            DataGridView1.Columns(i).Width = DataGridViewAutoSizeColumnMode.AllCells
        Next

        '         
        cboOp1.Items.Add(">")
        cboOp1.Items.Add("<")
        cboOp1.Items.Add("=")
        cboOp1.Items.Add("<>")

        cboOp2.Items.Add(">")
        cboOp2.Items.Add("<")
        cboOp2.Items.Add("=")
        cboOp2.Items.Add("<>")

        cboOp3.Items.Add(">")
        cboOp3.Items.Add("<")
        cboOp3.Items.Add("=")
        cboOp3.Items.Add("<>")

        '          
        cboZuhe1.Items.Add(" ")
        cboZuhe1.Items.Add(" ")

        cboZuhe2.Items.Add(" ")
        cboZuhe2.Items.Add(" ")
    End Sub

    Public Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
        '        
        If cboZuhe1.Text.Trim() = "" Then
            If cboField1.Text.Trim() = "" Or cboOp1.Text.Trim() = "" Or txt1.Text.Trim() = "" Then
                MsgBox("         ,       !", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "  ")
                Exit Sub
            End If
        End If

        If cboZuhe1.Text.Trim() <> "" Then
            If cboField1.Text.Trim() = "" Or cboOp1.Text.Trim() = "" Or txt1.Text.Trim() = "" Or
                    cboField2.Text.Trim() = "" Or cboOp2.Text.Trim() = "" Or txt2.Text.Trim() = "" Then
                MsgBox("         ,       !", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "  ")
                Exit Sub
            End If
        End If

        If cboZuhe2.Text.Trim() <> "" Then
            If cboField1.Text.Trim() = "" Or cboOp1.Text.Trim() = "" Or txt1.Text.Trim() = "" Or
                    cboField2.Text.Trim() = "" Or cboOp2.Text.Trim() = "" Or txt2.Text.Trim() = "" Or
                    cboField3.Text.Trim() = "" Or cboOp3.Text.Trim() = "" Or txt3.Text.Trim() = "" Then

                MsgBox("         ,       !", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "  ")

                Exit Sub
            End If

        End If


        group.TableName = GetTableName()   '        
        group.Field1 = ToEnglish(cboField1.Text.Trim())  '         
        group.Field2 = ToEnglish(cboField2.Text.Trim())
        group.Field3 = ToEnglish(cboField3.Text.Trim())

        group.OP1 = cboOp1.Text.Trim()  '         
        group.OP2 = cboOp2.Text.Trim()
        group.OP3 = cboOp3.Text.Trim()

        group.TXT1 = txt1.Text.Trim()   '           
        group.TXT2 = txt2.Text.Trim()
        group.TXT3 = txt3.Text.Trim()

        group.ZU1 = ToEnglish(cboZuhe1.Text.Trim())   '          
        group.ZU2 = ToEnglish(cboZuhe2.Text.Trim())



        Dim dt As New DataTable   '    datatable    
        Dim bllgroupquery As New BLLGroupQuery  '  B 

        Call Togrid()   '         

    End Sub

    Public Overridable Function ToEnglish(cboName As String) As String
        '        
        Return ""
    End Function

    Public Overridable Function GetTableName() As String
        '    
        Return ""
    End Function

    Public Overridable Sub Togrid()
        '    
    End Sub
    Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
        '    
        Me.Close()
    End Sub
    Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
        '    
        Call textInfo()
        If AllClear(arrayContorl) Then
            cboField1.Focus()
            Exit Sub
        End If
    End Sub
End Class

    다음은 하위 창의 실현 으로 부모 창 을 계승 하여 세 개의 추상 적 인 함 수 를 다시 썼 다.이렇게 U 층 에서 가 져 온 필드 이름, 연산 자, 조회 내용, 조합 관계, 표 이름 을 ModelGroup 에 전달 하고 model 층 에서 문자열 을 연결 하 며 D 층 호출 을 데이터베이스 에 전송 하여 데 이 터 를 조정 합 니 다.
Imports BLL
Imports Model
'************************************************************
'   :frmGroupOn   
'    :UI 
'  :      ,        ,  toenglish,gettablename,togrid
'    :2014-10-21
'  :  
'  :**
'**************************************************************
Public Class frmGroupOn
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  
        cboField1.Items.Add("  ")
        cboField1.Items.Add("  ")
        cboField1.Items.Add("    ")
        cboField1.Items.Add("    ")
        cboField1.Items.Add("   ")

        cboField2.Items.Add("  ")
        cboField2.Items.Add("  ")
        cboField2.Items.Add("    ")
        cboField2.Items.Add("    ")
        cboField2.Items.Add("   ")

        cboField3.Items.Add("  ")
        cboField3.Items.Add("  ")
        cboField3.Items.Add("    ")
        cboField3.Items.Add("    ")
        cboField3.Items.Add("   ")
    End Sub

    Public Overrides Function ToEnglish(cboName As String) As String
        Select Case cboName
            Case "  "
                ToEnglish = "cNo"
            Case "  "
                ToEnglish = "sName"
            Case "    "
                ToEnglish = "lOnDate"
            Case "    "
                ToEnglish = "lOnTime"
            Case "   "
                ToEnglish = "lPC"
            Case " "
                ToEnglish = "and"
            Case " "
                ToEnglish = "or"
            Case Else
                ToEnglish = ""
        End Select
    End Function

    Public Overrides Function GetTableName() As String
        '        
        Return "T_Line"
    End Function

    Public Overrides Sub Togrid()
        '      datagridview   
        Dim dt As New DataTable
        Dim GroupQueryBLL As New BLLGroupQuery

        Try
            dt = GroupQueryBLL.GroupQuery(group)

            If dt.Rows.Count = Nothing Then

                dt.Clear()
                DataGridView1.DataSource = Nothing
                DataGridView1.Refresh()
                Throw New Exception("         !")
            Else
                DataGridView1.DataSource = dt
                DataGridView1.Columns(0).Visible = False
                DataGridView1.Columns(1).HeaderText = "  "
                DataGridView1.Columns(2).Visible = False
                DataGridView1.Columns(3).Visible = False
                DataGridView1.Columns(4).HeaderText = "  "
                DataGridView1.Columns(5).Visible = False
                DataGridView1.Columns(6).Visible = False
                DataGridView1.Columns(7).HeaderText = "    "
                DataGridView1.Columns(8).HeaderText = "    "
                DataGridView1.Columns(9).HeaderText = "    "
                DataGridView1.Columns(10).HeaderText = "    "
                DataGridView1.Columns(11).HeaderText = "    "
                DataGridView1.Columns(12).Visible = False
                DataGridView1.Columns(13).Visible = False
                DataGridView1.Columns(14).Visible = False
                DataGridView1.Columns(15).HeaderText = "   "
            End If
        Catch ex As Exception
            MsgBox("     :" + ex.Message, MsgBoxStyle.Information, "  ")
        End Try
    End Sub
End Class

    템 플 릿 방법 모델 을 실천 했다. 나 는 가장 핵심 적 인 것 은 부모 류 방법 을 다시 쓰 고 다 형 성 을 실현 하 는 것 이 라 고 생각한다.여기 에는 헷 갈 리 기 쉬 운 개념 이 있 는데, 그것 이 바로 무 거 운 짐 이다.9 기의 스승 은 일찍이 나 에 게 두 사람 사이 의 공통점 과 차이 점 을 물 어 본 적 이 있 는데, 여기 서 정리 하 는 김 에.
2. Overload 와 Override
    1. 기본 개념
    Overload (다시 불 러 오기): 한 클래스 에서 같은 이름 의 여러 방법 을 정의 하면 서로 다른 매개 변수 개수 나 서로 다른 매개 변수 유형 이 있 으 면 방법의 다시 불 러 옵 니 다.
    Override (재 작성): 하위 클래스 에서 부모 클래스 와 같은 이름과 인 자 를 정의 하면 재 작성 되 었 다 고 합 니 다.
    
    2. 대비
    
    양 자 는 모두 유형의 다 태 성 을 나 타 냈 지만 자세히 보면 양자 다 태 성의 표현 형식 은 다르다.재 작성 의 실질 은 자 류 가 아버지 류 의 계승 에 대해 다 형 성 을 실현 하고 자 류 로 하여 금 아버지 류 의 방법 을 다시 쓰 게 하 며 구체 적 으로 아버지 류 의 추상 적 인 방법 을 실현 하 게 하 는 것 이다.동물"방법 은 동물 마다 먹 는 방법 이 다 릅 니 다. 고양 이 는 물고기 와 개 를 먹고 고 기 를 먹 습 니 다. 무 거 운 짐 은 실질 적 으로 같은 종류 에서 매개 변수 목록 의 변 화 를 통 해 같은 방법 을 다시 싣 는 것 입 니 다. 예 를 들 어 면적 을 구 하 는 종류, 삼각형 은 바닥 과 높이 가 필요 합 니 다. 정사각형 은 길이 가 필요 합 니 다. 그러면 면적 을 구 하 는 방법 으로 서로 다른 모양 의 면적 을 구 하 는 수 요 를 실현 해 야 합 니 다."제발.
     더욱 미세한 차 이 는 아래 표 에 요약 된다.
재 작성 과 재 업로드
오 버 라 이 드 (재 작성)
과부하 (과부하)
매개 변수 목록
변 할 수 없다
변수 개수, 유형, 순서
반환 형식
변 할 수 없다
가 변
접근 권한
감소 가능, 진급 불가
가 변
이상 을 던지다
적 으 면 안 되 고, 많 으 면 안 된다.
가 변
다 태 적 표현
부류
같은 부류 중
    3. 코드 구현
   eg: override (재 작성) 의 예
<span style="font-family:FangSong_GB2312;font-size:18px;"><strong>    '  
    Public Class TheBase
        Public Overridable Sub Talk()
            MsgBox("What's up?")
        End Sub
    End Class
    '   
    Public Class TheDerived
        Inherits TheBase
        Public Overrides Sub Talk()
            MsgBox("I'm not the base.")
        End Sub
    End Class
 
  
    Sub Main()
        Dim TestClass As TheDerived
        TestClass.Talk()
    End Sub
 
    
 
     : I'm not the base.</strong></span>

    eg: override (다시 불 러 오기) 의 예
 Public Class TheClass
        Public Overloads Sub ToOverload(ByVal value As Integer)
            MsgBox("I got an integer:" & CStr(value))
        End Sub
        '  
        Public Overloads Sub ToOverload(ByVal value As String)
            MsgBox("I got a string:" & value)
        End Sub
    End Class
  
    Sub Main()
        Dim MyClass As TheClass
        MyClass.ToOverload(9527)
        MyClass.ToOverload("Hello World!")
    End Sub
    
 
        : I got an integer:9527
        : I got a string:Hello World!

3. 총화
    템 플 릿 방법 은 비교적 자주 사용 하 는 디자인 모델 로 대상 을 대상 으로 하 는 주류 에서 계승 과 다 태 적 실현 은 코드 를 최적화 하 는 좋 은 조력자 임 에 틀림없다. 템 플 릿 방법의 사용 을 통 해 유형의 다 태 성 을 한층 더 인식 하고 비 교 를 통 해 다 태 적 인 서로 다른 표현 방법 을 알 게 되 었 다. 기계실 은 정말 두 드 릴 수록 재 미 있 고 마지막 상하 기 가 남 았 으 며 전략 모델 을 추가 했다.식 은 어 떻 습 니까?

좋은 웹페이지 즐겨찾기