首页 > 其他 > 详细

Golang简单工厂方法demo

时间:2020-04-19 20:49:21      阅读:52      评论:0      收藏:0      [点我收藏+]
package main

import "fmt"

/*
    ①封装人,属性包括姓名、年龄、身高、体重、颜值、资产、性别、性取向
    ②给人封装结婚方法,参数是潜在的结婚对象:
          a、如果对方的性取向有问题,panic
        b、如果对方的颜值过低,返回错误
          c、否则返回满意程度
 */

 type Gender int //性别取向


 func (g Gender) String() string {
     return []string{"Male","Female","Bisexual"}[g]
 }

 //性别枚举
 const (
     Male  = iota     //
     Female             //
     Bisexual         //人妖
 )

 type Human struct{
     Name string         //名字
     Age int             //年龄
     Height int          //身高
     Weight int          //体重
     Looking  int         //自己的颜值
     TargetLooking int   //期望的颜值
     Rmb int             //人民币
     Sex Gender          //自己的性别
     TargetSex Gender      //结婚目标性别

 }

 //不理想配偶错误
type BadSouseError struct {
    why string
}

 func (bse *BadSouseError)Error() string{
    return bse.why
 }

 //工厂方法
 func CreateBadSpouseError(o *Human) *BadSouseError {
     bse := new(BadSouseError)
     if o.Rmb < 1000000{
         bse.why = "太穷"
    } else if o.Weight > 200 {
        bse.why = "太胖"
    } else if o.Age > 50 {
        bse.why = "太老"
    } else {
        return nil
    }
     return bse
 }

 func (h *Human)Marry(o *Human) (happiness int, err error) {


     //如果他的性别不等于你期望性别,报错
     if o.Sex != h.TargetSex {
        panic(&BadSouseError{"淡定,,,我不是你的菜"})
        return
    }
    if err = CreateBadSpouseError(o);err != nil {
        return
    }
     //如果颜值过低,返回错误
     if o.Looking < h.TargetLooking {
         panic(&BadSouseError{"sorry,颜值不匹配"})
         return
    }

     //计算幸福程度
     happiness =(o.Height*o.Looking)/(h.Weight*h.TargetLooking)
    return
 }

 func NewHuman(name string,age,height,weight,rmb,looking,targetlooking int,sex,targetsex Gender) *Human{
    human := new(Human)
    human.Name = name
    human.Age = age
    human.Height = height
    human.Weight = weight
    human.Rmb = rmb
    human.Looking = looking
    human.TargetLooking = targetlooking
    human.Sex = sex
    human.TargetSex = targetsex
    return human
 }

 func main(){


     defer func(){
         if err := recover(); err != nil {
             fmt.Println(err)
         }
     }()


    cook :=NewHuman("库克",11,180,123,123456,60,10,Male,Male)
    ySister := NewHuman("你妹",20,155,150,4321,20,90,Male,Male)
     happiness,err := cook.Marry(ySister)
     if err != nil {
         fmt.Println("牵手失败",err)
     } else {
         fmt.Println("牵手成功,幸福指数=",happiness)

     }

 }

 

Golang简单工厂方法demo

原文:https://www.cnblogs.com/wt645631686/p/12401214.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!