Go Decorator装饰设计模式

本文探讨了在Go语言中如何使用装饰者模式对不同类型的流(如文件流和网络流)进行操作和扩展,包括加密和缓冲等高级功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import "fmt"

// 定义一个刘接口
type Stream interface {
	// 读流
	ReadStream()
	//写流
	WriterStream()
}

// 文件流
type FileStream struct {

}

// 读文件流
func (f *FileStream) ReadStream(){
	fmt.Println("读文件流")
}

// 写文件流
func (f *FileStream) WriterStream(){
	fmt.Println("写文件流")

}

// 网络流操作
type NetworkStream struct {

}

// 读网络流
func (n *NetworkStream) ReadStream(){
	fmt.Println("读网络流")

}

// 写网络流
func (n *NetworkStream) WriterStream() {
	fmt.Println("写网络流")
}

// =================在原有的基础上进行扩展操作====================
type DecoratorStream struct {
	// 根据马丁重构理论,如果多个子类拥有相同的字段,可以把这个字段提到父类中
	// 在这个sample中,显然不适合提到interface中,所以我们可以提到中间的struct中
	stream Stream
}

// 加密流
type CryptoStream struct {
	//stream Stream 提升到父类中
	DecoratorStream
}

// 对读流进行加密
func (c *CryptoStream) ReadStream(){
	fmt.Println("对读流进行加密...")
	c.stream.ReadStream()
}

// 对写流进行加密
func (c *CryptoStream) WriterStream(){
	fmt.Println("对写流进行加密...")
	c.stream.WriterStream()
}

// 对流进行缓冲
type BufferedStream struct {
	//stream Stream 提升到父类中
	DecoratorStream
}

// 对读取流进行缓冲
func (b *BufferedStream) ReadStream(){
	fmt.Println("对读取流进行缓存...")
	b.stream.ReadStream()
}

// 对写入流进行缓冲
func (b *BufferedStream) WriterStream(){
	fmt.Println("对写入流进行缓存...")
	b.stream.WriterStream()
}

func main(){
	// 对文件流进行操作
	fmt.Println("====对文件流进行操作====")
	f := new(FileStream)
	f.ReadStream()
	f.WriterStream()

	// 对网络流进行操作
	fmt.Println("====对网络流进行操作====")
	n := new(NetworkStream)
	n.ReadStream()
	n.WriterStream()

	fmt.Println("====对文件流进行加密操作")
	cf := new(CryptoStream)
	cf.stream = f
	cf.ReadStream()
	cf.WriterStream()


	fmt.Println("====对文件流进行加密和缓存操作")
	bs := new(BufferedStream)
	bs.stream = cf
	bs.ReadStream()
	bs.WriterStream()

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值