디자인 모델 의 골 랑 실현 - 단순 공장 모델
2108 단어 디자인 모델 의 golang 실현
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