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()
}
Go Decorator装饰设计模式
最新推荐文章于 2025-02-20 22:25:19 发布