每日一题 【每日一题】实现一个工厂模式-Python-20210901

Jack · 2021年09月01日 · 最后由 lework 回复于 2021年12月17日 · 70 次阅读
本帖已被设为精华帖!

实现一个工厂模式。

Jack 将本帖设为了精华贴 09月01日 21:48

参考代码:

# 首先定义一个抽象基类
class CarStore(object):
    # 定义生产汽车的方法
    def createcar(self, name):
        pass
    # 根据类型去生产车
    def order(self, name):
        self.car = self.createcar(name)
        self.car.move()

# 定义4s店  实现抽象类
class AoDiCarStore(CarStore):
    def createcar(self, name):
        self.factory = CarFactory()
        return self.factory.createcar(name)

# 创建一个车
class AoDi():
    def move(self):
        print('移动')
# 定义一个工厂
class CarFactory():
    def createcar(self, name):
        self.name = name
        if self.name == 'AoDi':
            self.car = AoDi()
        return self.car
aodi = AoDiCarStore()
aodi.order('AoDi')
package main

import "fmt"

// 定义一个结构体
type student struct {
    Name string
    score float64
}

// student 因为student结构体首字母是小写,因此是只能在model使用
// 我们通过工厂模式来解决
func NewStudent(n string, s float64) *student {
    return &student{
        Name: n,
        score: s,
    }
}
// 如果score字段首字母小写,则,在其它包不可以直接方法,我们可以提供一个方法
func (s *student) GetScore()  float64{
    return s.score
}

func main() {
    /*
      实现一个工厂模式
      简单工厂模式是属于创建型模式,简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
      简单工厂模式是 GoLang 最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
    */

    //定student结构体是首字母小写,我们可以通过工厂模式来解决
    var stu = NewStudent("tom~", 98.8)

    fmt.Println(*stu) //&{....}
    fmt.Println("name=", stu.Name, " score=", stu.GetScore())
}
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册