디자인 모델 의 골 랑 실현 - 단순 공장 모델

최근 에 잠깐 놀 았 던 골 랑 은 연습 을 하면 서 예전 에 큰소리 치 는 디자인 모델 을 봤 다 고 생각 하고 이 루 고 싶 었 습 니 다.
 
package easyfactory

import "errors"

type operation struct {
}

type cal interface {
	cal(int, int) (float64, error)
}

type operationAdd struct {
	operation
}

func (o *operationAdd) cal(num1, num2 int) (float64, error) {
	return float64(num1 + num2), nil
}

type operationMinus struct {
	operation
}

func (o *operationMinus) cal(num1 int, num2 int) (float64, error) {
	return float64(num1 - num2), nil
}

type operationMulti struct {
	operation
}

func (o *operationMulti) cal(num1 int, num2 int) (float64, error) {
	return float64(num1 * num2), nil
}

type operationDiv struct {
	operation
}

func (o *operationDiv) cal(num1, num2 int) (float64, error) {
	if num2 == 0 {
		return 0, errors.New("          0")
	}
	return float64(num1 / num2), nil
}

type operationFactory struct{}

func (o *operationFactory) createOperation(op string) cal {
	switch op {
	case "+":
		return new(operationAdd)
	case "-":
		return new(operationMinus)
	case "*":
		return new(operationMulti)
	case "/":
		return new(operationDiv)
	}
	return nil
}
package easyfactory

import "testing"

func TestOperation(t *testing.T) {
	var factory operationFactory
	ent := factory.createOperation("+")
	if got, _ := ent.cal(1, 2); got != 3 {
		t.Errorf("cal(1,2)=%v, want %v", got, 3)
	}
}

 
 
 
 
 
 
 
 
 
생각:
1. 간단 한 공장 모델 은 연산 류 의 실례 화 를 밀봉 하여 업무 코드 중의 하 드 코딩 실례 화 를 피 했다. 이런 장점 은 만약 에 우리 의 계산 류, 예 를 들 어 계산 류 의 명칭 변경 이 어디 에 나 계산 류 를 사용 하지 않 아 도 된다 는 것 이다.
공장 방법 중 한 곳 만 수정 하면 된다.
2. 테스트 패 키 지 를 통 해 전체 기능 의 실현 은 공장 류 를 통 해 구체 적 인 연산 류 를 얻 고 연산 류 의 cal 방법 을 호출 해 야 한 다 는 것 을 알 수 있다.
3. 간단 한 공장 모델 은 개폐 원칙 을 파괴 했다. 예 를 들 어 우 리 는 제곱 연산 을 추가 하고 공장 류 의 create Operation 방법 을 수정 해 야 한다.
아 리 클 라 우 드 쌍 십일 클 라 우 드 서버 조합 활동, 최저 가 99 원 까지 1 년!필요 한 게 있 으 면 생각해 봐 도 돼!
https://m.aliyun.com/act/team1111/#/share?params=N.9g4CZ2TwSh.qilw7y0a
 
 

좋은 웹페이지 즐겨찾기