implemented abstract factory
This commit is contained in:
parent
e147dcd8f8
commit
10314f2183
109
creational/abstract_factory/abstract_factory.go
Normal file
109
creational/abstract_factory/abstract_factory.go
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
package abstract_factory
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
//sub factory abstractions
|
||||||
|
type VehicleFactory interface {
|
||||||
|
Create(int) (Vehiche, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type CarFactory struct{}
|
||||||
|
func (f *CarFactory) Create(vType int) (Vehiche, error) {
|
||||||
|
switch vType {
|
||||||
|
case OFFROADER_CAR:
|
||||||
|
return new(Offroader), nil
|
||||||
|
case SPORT_CAR:
|
||||||
|
return new(Sportcar), nill
|
||||||
|
default:
|
||||||
|
return nil, errors.New(fmt.Sprintf("Unsupported car vehicle type:%d", vType))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type BusFactory struct {}
|
||||||
|
func(f *BusFactory) Create(vType int)(Vehiche, error) {
|
||||||
|
switch vType {
|
||||||
|
case CITY_TOUR_BUS:
|
||||||
|
return new(CityTourBus), nil
|
||||||
|
case SIMPLE_BUS:
|
||||||
|
return new(SimpleBus), nil
|
||||||
|
default:
|
||||||
|
return nil, errors.New(fmt.Sprintf("Unsupported bus vehicle type:%d", vType))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//object families............
|
||||||
|
type Vehiche interface {
|
||||||
|
WheelCount() int
|
||||||
|
}
|
||||||
|
|
||||||
|
//Car
|
||||||
|
const (
|
||||||
|
OFFROADER_CAR = 1
|
||||||
|
SPORT_CAR = 2
|
||||||
|
)
|
||||||
|
|
||||||
|
type Car interface {
|
||||||
|
DoorCount() int
|
||||||
|
}
|
||||||
|
|
||||||
|
type Offroader struct{}
|
||||||
|
func (c Offroader) WheelCount() int {
|
||||||
|
return 4
|
||||||
|
}
|
||||||
|
func (c Offroader) DoorCount() int {
|
||||||
|
return 4
|
||||||
|
}
|
||||||
|
|
||||||
|
type Sportcar struct{}
|
||||||
|
func (c Sportcar) WheelCount() int {
|
||||||
|
return 4
|
||||||
|
}
|
||||||
|
func (c Sportcar) DoorCount() int {
|
||||||
|
return 2
|
||||||
|
}
|
||||||
|
|
||||||
|
//Bus..................
|
||||||
|
const (
|
||||||
|
SIMPLE_BUS = 1
|
||||||
|
CITY_TOUR_BUS = 2
|
||||||
|
)
|
||||||
|
|
||||||
|
type Bus interface {
|
||||||
|
FloorCount() int
|
||||||
|
}
|
||||||
|
|
||||||
|
type CityTourBus struct{}
|
||||||
|
func (c CityTourBus) WheelCount() int {
|
||||||
|
return 6
|
||||||
|
}
|
||||||
|
func (c CityTourBus) FloorCount() int {
|
||||||
|
return 2
|
||||||
|
}
|
||||||
|
|
||||||
|
type SimpleBus struct{}
|
||||||
|
func (c SimpleBus) WheelCount() int {
|
||||||
|
return 4
|
||||||
|
}
|
||||||
|
func (c SimpleBus) FloorCount() int {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
//super factory
|
||||||
|
const (
|
||||||
|
CAR = 1
|
||||||
|
BUS = 2
|
||||||
|
)
|
||||||
|
|
||||||
|
func CreateVehicleFactory(vfType int) (VehicleFactory, error) {
|
||||||
|
switch vfType {
|
||||||
|
case CAR:
|
||||||
|
return new(CarFactory), nil
|
||||||
|
case BUS:
|
||||||
|
return new(BusFactory), nil
|
||||||
|
default:
|
||||||
|
return nil, errors.New("Unrecognized factory type:%d", vfType)
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user