실전 템 플 릿 방법 모드 - 다 중 태 도 를 조금 알 아 보기
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. 총화
템 플 릿 방법 은 비교적 자주 사용 하 는 디자인 모델 로 대상 을 대상 으로 하 는 주류 에서 계승 과 다 태 적 실현 은 코드 를 최적화 하 는 좋 은 조력자 임 에 틀림없다. 템 플 릿 방법의 사용 을 통 해 유형의 다 태 성 을 한층 더 인식 하고 비 교 를 통 해 다 태 적 인 서로 다른 표현 방법 을 알 게 되 었 다. 기계실 은 정말 두 드 릴 수록 재 미 있 고 마지막 상하 기 가 남 았 으 며 전략 모델 을 추가 했다.식 은 어 떻 습 니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.