我们一起来读书吧 关注:154贴子:2,807
  • 0回复贴,共1

《设计模式》2.1-2.6

只看楼主收藏回复

2.1-2.6 通过设计一个文档器的介绍来解释了如何拆解一个设计方案 ,其中通过思考列举了几个设计模式
组合模式:实现了灵活的文档结构,允许嵌套和递归组合。
策略模式:封装了不同的格式化算法,提供了灵活的文档布局。
装饰器模式:动态为文档元素添加功能,增强了用户界面。
抽象工厂模式:支持了多种视感标准和不同的操作系统。
桥接模式:解耦了窗口操作与实现,增强了系统的可移植性。
以下来个例子
装饰器模式
// 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 方法
}
}


IP属地:北京1楼2024-08-29 20:58回复