内容简介:工厂方法模式类图,abstract_factory_test.gocar_factory.go
工厂方法模式类图,
image.png
abstract_factory_test.go
// abstract_factory_test package abstract_factory import ( "testing" ) func TestMotorbikeFactory(t *testing.T) { motobikeF, err := GetVehicleFactory(MotobikeFactoryType) if err != nil { t.Fatal("Create motorbike vehicle factory failed") } vehicle, err := motobikeF.GetVehicle(SportMotorbikeType) if err != nil { t.Fatal("Create sports motor bike failed") } sportVehicle, ok := vehicle.(Motorbike) if !ok { t.Fatal("vehicle is not a motorbike") } t.Logf("Motorbike type is %d", sportVehicle.GetType()) _, err = motobikeF.GetVehicle(3) if err == nil { t.Fatalf("There is no motor bike type is %d", 3) } }
car_factory.go
// car_factory package abstract_factory import ( "errors" "fmt" ) const ( LuxuryCarType = 1 FamiliarCarType = 2 ) type CarFactory struct{} func (c *CarFactory) GetVehicle(v int) (Vehicle, error) { switch v { case LuxuryCarType: return new(LuxuryCar), nil case FamiliarCarType: return new(FamiliarCar), nil default: return nil, errors.New(fmt.Sprintf("Car of type %v not recognized", v)) } }
motorbike_factory.go
// motorbike_factory package abstract_factory import ( "errors" "fmt" ) const ( SportMotorbikeType = 1 CruiseMotorbikeType = 2 ) type MotobikeFactory struct{} func (m *MotobikeFactory) GetVehicle(v int) (Vehicle, error) { switch v { case SportMotorbikeType: return new(SportMotorbike), nil case CruiseMotorbikeType: return new(CruiseMotorbike), nil default: return nil, errors.New(fmt.Sprintf("type of motorbike %v not recognized", v)) } }
vehicle.go
// vehicle package abstract_factory type Vehicle interface { GetWheels() int GetSeats() int }
car.go
// car package abstract_factory type Car interface { GetDoors() int }
motorbike.go
// motorbike package abstract_factory type Motorbike interface { GetType() int }
luxury_car.go
// luxury_car package abstract_factory type LuxuryCar struct{} func (l *LuxuryCar) GetDoors() int { return 4 } func (l *LuxuryCar) GetWheels() int { return 4 } func (l *LuxuryCar) GetSeats() int { return 5 }
familiar_car.go
// familiar_car package abstract_factory type FamiliarCar struct{} func (f *FamiliarCar) GetDoors() int { return 5 } func (f *FamiliarCar) GetWheels() int { return 4 } func (f *FamiliarCar) GetSeats() int { return 5 }
sport_motorbike.go
// sport_motorbike package abstract_factory type SportMotorbike struct{} func (s *SportMotorbike) GetType() int { return SportMotorbikeType } func (s *SportMotorbike) GetWheels() int { return 2 } func (s *SportMotorbike) GetSeats() int { return 2 }
cruise_motorbike.go
// cruise_motorbike package abstract_factory type CruiseMotorbike struct{} func (c *CruiseMotorbike) GetType() int { return CruiseMotorbikeType } func (c *CruiseMotorbike) GetWheels() int { return 2 } func (c *CruiseMotorbike) GetSeats() int { return 2 }
程序输出如下,单元测试不太充分,不想写了。覆盖率才到25%。
image.png
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 设计模式-享元设计模式
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Developing Large Web Applications
Kyle Loudon / Yahoo Press / 2010-3-15 / USD 34.99
As web applications grow, so do the challenges. These applications need to live up to demanding performance requirements, and be reliable around the clock every day of the year. And they need to withs......一起来看看 《Developing Large Web Applications》 这本书的介绍吧!