装饰器模式
// Coffee 接口,定义了咖啡的基本行为
type Coffee interface {
Description() string
}
// SimpleCoffee 是基础的咖啡类
type SimpleCoffee struct{}
func (c *SimpleCoffee) Description() string {
return "Simple coffee"
}
// MilkDecorator 是装饰器,用于为咖啡添加牛奶
type MilkDecorator struct {
coffee Coffee
}
func (d *MilkDecorator) Description() string {
return d.coffee.Description() + ", with milk"
}
组合模式
// Component 接口,所有的组件(叶子和组合)都需要实现这个接口
type Component interface {
Render() // Render 方法,所有组件都需要实现这个方法
}
// Button 类型,表示具体的叶子组件
type Button struct {
name string
}
func (b *Button) Render() {
fmt.Printf("Rendering Button: %s\n", b.name)
}
// TextBox 类型,表示具体的叶子组件
type TextBox struct {
content string
}
func (t *TextBox) Render() {
fmt.Printf("Rendering TextBox with content: %s\n", t.content)
}
// Composite 类型,可以包含其他 Component 类型的元素
type Composite struct {
children []Component
}
func (c *Composite) Add(component Component) {
c.children = append(c.children, component)
}
func (c *Composite) Render() {
fmt.Println("Rendering Composite Component with children:")
for _, child := range c.children {
child.Render() // 调用每个子组件的 Render 方法
}
}
// Coffee 接口,定义了咖啡的基本行为
type Coffee interface {
Description() string
}
// SimpleCoffee 是基础的咖啡类
type SimpleCoffee struct{}
func (c *SimpleCoffee) Description() string {
return "Simple coffee"
}
// MilkDecorator 是装饰器,用于为咖啡添加牛奶
type MilkDecorator struct {
coffee Coffee
}
func (d *MilkDecorator) Description() string {
return d.coffee.Description() + ", with milk"
}
组合模式
// Component 接口,所有的组件(叶子和组合)都需要实现这个接口
type Component interface {
Render() // Render 方法,所有组件都需要实现这个方法
}
// Button 类型,表示具体的叶子组件
type Button struct {
name string
}
func (b *Button) Render() {
fmt.Printf("Rendering Button: %s\n", b.name)
}
// TextBox 类型,表示具体的叶子组件
type TextBox struct {
content string
}
func (t *TextBox) Render() {
fmt.Printf("Rendering TextBox with content: %s\n", t.content)
}
// Composite 类型,可以包含其他 Component 类型的元素
type Composite struct {
children []Component
}
func (c *Composite) Add(component Component) {
c.children = append(c.children, component)
}
func (c *Composite) Render() {
fmt.Println("Rendering Composite Component with children:")
for _, child := range c.children {
child.Render() // 调用每个子组件的 Render 方法
}
}