├── .gitignore ├── README.md ├── creational ├── abstract-factory │ ├── README.md │ ├── abstract_factory.go │ ├── abstract_factory_test.go │ ├── color.go │ ├── color_factory.go │ ├── factory_producer.go │ ├── shape.go │ └── shape_factory.go ├── builder │ ├── MealBuilder.go │ ├── README.md │ ├── bottle.go │ ├── burger.go │ ├── chicken_burger.go │ ├── cocacola.go │ ├── cold_drink.go │ ├── item.go │ ├── meal.go │ ├── meal_builder_test.go │ ├── packing.go │ ├── pepsicola.go │ ├── veg_burger.go │ └── wrapper.go ├── factory │ ├── README.md │ ├── circle.go │ ├── rectangle.go │ ├── shape.go │ ├── shape_factory.go │ ├── shape_factory_test.go │ └── square.go ├── prototype │ ├── README.md │ ├── circle.go │ ├── rectangle.go │ ├── shape.go │ ├── shape_cache.go │ ├── shape_cache_test.go │ └── square.go └── singleton │ ├── README.md │ ├── double_check_singleton.go │ ├── hunger_singleton.go │ ├── lazy_singleton.go │ └── singleton_test.go ├── go.mod └── structural ├── adapter ├── README.md ├── adapter_test.go ├── advanced_media_player.go ├── audio_player.go ├── media_player.go ├── mp4_media_adapter.go ├── mp4_player.go ├── vlc_media_adapter.go └── vlc_player.go ├── bridge ├── README.md ├── bridge_test.go ├── circle_shape.go ├── draw_api.go ├── green_circle.go ├── red_circle.go └── shape.go ├── composite ├── README.md ├── composite_test.go └── employee.go ├── decorator ├── README.md ├── circle.go ├── decorator_test.go ├── green_shape_decorator.go ├── rectangle.go ├── red_shape_decorator.go ├── shape.go └── shape_decorator.go └── filter ├── README.md ├── and_criteria.go ├── criteria.go ├── criteria_female.go ├── criteria_male.go ├── filter_test.go ├── or_criteria.go ├── person.go └── young_criteria.go /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/.gitignore -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/README.md -------------------------------------------------------------------------------- /creational/abstract-factory/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/abstract-factory/README.md -------------------------------------------------------------------------------- /creational/abstract-factory/abstract_factory.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/abstract-factory/abstract_factory.go -------------------------------------------------------------------------------- /creational/abstract-factory/abstract_factory_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/abstract-factory/abstract_factory_test.go -------------------------------------------------------------------------------- /creational/abstract-factory/color.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/abstract-factory/color.go -------------------------------------------------------------------------------- /creational/abstract-factory/color_factory.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/abstract-factory/color_factory.go -------------------------------------------------------------------------------- /creational/abstract-factory/factory_producer.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/abstract-factory/factory_producer.go -------------------------------------------------------------------------------- /creational/abstract-factory/shape.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/abstract-factory/shape.go -------------------------------------------------------------------------------- /creational/abstract-factory/shape_factory.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/abstract-factory/shape_factory.go -------------------------------------------------------------------------------- /creational/builder/MealBuilder.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/MealBuilder.go -------------------------------------------------------------------------------- /creational/builder/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/README.md -------------------------------------------------------------------------------- /creational/builder/bottle.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/bottle.go -------------------------------------------------------------------------------- /creational/builder/burger.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/burger.go -------------------------------------------------------------------------------- /creational/builder/chicken_burger.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/chicken_burger.go -------------------------------------------------------------------------------- /creational/builder/cocacola.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/cocacola.go -------------------------------------------------------------------------------- /creational/builder/cold_drink.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/cold_drink.go -------------------------------------------------------------------------------- /creational/builder/item.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/item.go -------------------------------------------------------------------------------- /creational/builder/meal.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/meal.go -------------------------------------------------------------------------------- /creational/builder/meal_builder_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/meal_builder_test.go -------------------------------------------------------------------------------- /creational/builder/packing.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/packing.go -------------------------------------------------------------------------------- /creational/builder/pepsicola.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/pepsicola.go -------------------------------------------------------------------------------- /creational/builder/veg_burger.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/veg_burger.go -------------------------------------------------------------------------------- /creational/builder/wrapper.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/builder/wrapper.go -------------------------------------------------------------------------------- /creational/factory/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/factory/README.md -------------------------------------------------------------------------------- /creational/factory/circle.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/factory/circle.go -------------------------------------------------------------------------------- /creational/factory/rectangle.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/factory/rectangle.go -------------------------------------------------------------------------------- /creational/factory/shape.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/factory/shape.go -------------------------------------------------------------------------------- /creational/factory/shape_factory.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/factory/shape_factory.go -------------------------------------------------------------------------------- /creational/factory/shape_factory_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/factory/shape_factory_test.go -------------------------------------------------------------------------------- /creational/factory/square.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/factory/square.go -------------------------------------------------------------------------------- /creational/prototype/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/prototype/README.md -------------------------------------------------------------------------------- /creational/prototype/circle.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/prototype/circle.go -------------------------------------------------------------------------------- /creational/prototype/rectangle.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/prototype/rectangle.go -------------------------------------------------------------------------------- /creational/prototype/shape.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/prototype/shape.go -------------------------------------------------------------------------------- /creational/prototype/shape_cache.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/prototype/shape_cache.go -------------------------------------------------------------------------------- /creational/prototype/shape_cache_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/prototype/shape_cache_test.go -------------------------------------------------------------------------------- /creational/prototype/square.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/prototype/square.go -------------------------------------------------------------------------------- /creational/singleton/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/singleton/README.md -------------------------------------------------------------------------------- /creational/singleton/double_check_singleton.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/singleton/double_check_singleton.go -------------------------------------------------------------------------------- /creational/singleton/hunger_singleton.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/singleton/hunger_singleton.go -------------------------------------------------------------------------------- /creational/singleton/lazy_singleton.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/singleton/lazy_singleton.go -------------------------------------------------------------------------------- /creational/singleton/singleton_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/creational/singleton/singleton_test.go -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module go-design-patterns 2 | 3 | go 1.17 4 | -------------------------------------------------------------------------------- /structural/adapter/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/adapter/README.md -------------------------------------------------------------------------------- /structural/adapter/adapter_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/adapter/adapter_test.go -------------------------------------------------------------------------------- /structural/adapter/advanced_media_player.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/adapter/advanced_media_player.go -------------------------------------------------------------------------------- /structural/adapter/audio_player.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/adapter/audio_player.go -------------------------------------------------------------------------------- /structural/adapter/media_player.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/adapter/media_player.go -------------------------------------------------------------------------------- /structural/adapter/mp4_media_adapter.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/adapter/mp4_media_adapter.go -------------------------------------------------------------------------------- /structural/adapter/mp4_player.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/adapter/mp4_player.go -------------------------------------------------------------------------------- /structural/adapter/vlc_media_adapter.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/adapter/vlc_media_adapter.go -------------------------------------------------------------------------------- /structural/adapter/vlc_player.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/adapter/vlc_player.go -------------------------------------------------------------------------------- /structural/bridge/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/bridge/README.md -------------------------------------------------------------------------------- /structural/bridge/bridge_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/bridge/bridge_test.go -------------------------------------------------------------------------------- /structural/bridge/circle_shape.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/bridge/circle_shape.go -------------------------------------------------------------------------------- /structural/bridge/draw_api.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/bridge/draw_api.go -------------------------------------------------------------------------------- /structural/bridge/green_circle.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/bridge/green_circle.go -------------------------------------------------------------------------------- /structural/bridge/red_circle.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/bridge/red_circle.go -------------------------------------------------------------------------------- /structural/bridge/shape.go: -------------------------------------------------------------------------------- 1 | package bridge 2 | 3 | type Shape interface { 4 | draw() 5 | } 6 | -------------------------------------------------------------------------------- /structural/composite/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/composite/README.md -------------------------------------------------------------------------------- /structural/composite/composite_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/composite/composite_test.go -------------------------------------------------------------------------------- /structural/composite/employee.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/composite/employee.go -------------------------------------------------------------------------------- /structural/decorator/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/decorator/README.md -------------------------------------------------------------------------------- /structural/decorator/circle.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/decorator/circle.go -------------------------------------------------------------------------------- /structural/decorator/decorator_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/decorator/decorator_test.go -------------------------------------------------------------------------------- /structural/decorator/green_shape_decorator.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/decorator/green_shape_decorator.go -------------------------------------------------------------------------------- /structural/decorator/rectangle.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/decorator/rectangle.go -------------------------------------------------------------------------------- /structural/decorator/red_shape_decorator.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/decorator/red_shape_decorator.go -------------------------------------------------------------------------------- /structural/decorator/shape.go: -------------------------------------------------------------------------------- 1 | package decorator 2 | 3 | type Shape interface { 4 | draw() 5 | } 6 | -------------------------------------------------------------------------------- /structural/decorator/shape_decorator.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/decorator/shape_decorator.go -------------------------------------------------------------------------------- /structural/filter/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/filter/README.md -------------------------------------------------------------------------------- /structural/filter/and_criteria.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/filter/and_criteria.go -------------------------------------------------------------------------------- /structural/filter/criteria.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/filter/criteria.go -------------------------------------------------------------------------------- /structural/filter/criteria_female.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/filter/criteria_female.go -------------------------------------------------------------------------------- /structural/filter/criteria_male.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/filter/criteria_male.go -------------------------------------------------------------------------------- /structural/filter/filter_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/filter/filter_test.go -------------------------------------------------------------------------------- /structural/filter/or_criteria.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/filter/or_criteria.go -------------------------------------------------------------------------------- /structural/filter/person.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/filter/person.go -------------------------------------------------------------------------------- /structural/filter/young_criteria.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caixunshi/go-design-patterns/HEAD/structural/filter/young_criteria.go --------------------------------------------------------------------------------