//++++++++++++++++++++++++++++++++++++++++
// 《Go语言设计模式》源码
//++++++++++++++++++++++++++++++++++++++++
// Author:廖显东(ShirDon)
// Blog:https://www.shirdon.com/
// 作者知乎:https://www.zhihu.com/people/shirdonl
// 仓库地址:https://gitee.com/shirdonl/goDesignPattern
// 仓库地址:https://github.com/shirdonl/goDesignPattern
// 交流咨询,请关注公众号"源码大数据"
//++++++++++++++++++++++++++++++++++++++++
package actualCombat
// 发票数据对象
type Invoice struct {
Day int
Notice int
IsSent bool
}
// 数据规格接口
type Specification interface {
IsSatisfiedBy(Invoice) bool
And(Specification) Specification
Or(Specification) Specification
Not() Specification
Relate(Specification)
}
// 组合规格
type CompositeSpecification struct {
Specification
}
// 检查规格
func (cs *CompositeSpecification) IsSatisfiedBy(in Invoice) bool {
return false
}
// 规格与操作
func (cs *CompositeSpecification) And(spec Specification) Specification {
a := &AndSpecification{
cs.Specification, spec,
}
a.Relate(a)
return a
}
// 规格或操作
func (cs *CompositeSpecification) Or(spec Specification) Specification {
a := &OrSpecification{
cs.Specification, spec,
}
a.Relate(a)
return a
}
// 规格非操作
func (cs *CompositeSpecification) Not() Specification {
a := &NotSpecification{
cs.Specification,
}
a.Relate(a)
return a
}
// 与规格有关
func (cs *CompositeSpecification) Relate(spec Specification) {
cs.Specification = spec
}
// 与规格
type AndSpecification struct {
Specification
compare Specification
}
// 检查规格
func (as *AndSpecification) IsSatisfiedBy(in Invoice) bool {
return as.Specification.IsSatisfiedBy(in) && as.compare.IsSatisfiedBy(in)
}
// 或规格
type OrSpecification struct {
Specification
compare Specification
}
// 检查规格
func (os *OrSpecification) IsSatisfiedBy(in Invoice) bool {
return os.Specification.IsSatisfiedBy(in) || os.compare.IsSatisfiedBy(in)
}
// 非规格
type NotSpecification struct {
Specification
}
// 检查规格
func (ns *NotSpecification) IsSatisfiedBy(in Invoice) bool {
return ns.Specification.IsSatisfiedBy(in)
}
// 数据到期规格
type OverDueSpecification struct {
Specification
}
// 检查规格
func (os *OverDueSpecification) IsSatisfiedBy(in Invoice) bool {
return in.Day >= 30
}
// 创建数据到期规格
func NewOverDueSpecification() Specification {
a := &OverDueSpecification{&CompositeSpecification{}}
a.Relate(a)
return a
}
// 通知发送规格
type NoticeSentSpecification struct {
Specification
}
// 检查规格
func (ns *NoticeSentSpecification) IsSatisfiedBy(in Invoice) bool {
return in.Notice >= 3
}
// 创建通知发送规格
func NewNoticeSentSpecification() Specification {
a := &NoticeSentSpecification{&CompositeSpecification{}}
a.Relate(a)
return a
}
// 是否收到发票通知规格
type InCollectionSpecification struct {
Specification
}
// 检查规格
func (ics *InCollectionSpecification) IsSatisfiedBy(in Invoice) bool {
return !in.IsSent
}
// 创建是否收到发票通知规格
func NewInCollectionSpecification() Specification {
a := &InCollectionSpecification{&CompositeSpecification{}}
a.Relate(a)
return a
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论




















收起资源包目录





































































































共 257 条
- 1
- 2
- 3
资源评论


wjs2024
- 粉丝: 3422
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 大流量VPDN业务实现及网络优化方案探索.docx
- 附录B综合布线系统工程电气测试方法及测试内容.doc
- 电气工程其自动化考研总况.doc
- 计算机试卷及答案.doc
- 践行目标导向的项目管理治理.doc
- flare-硬件开发资源
- 计算机信息技术在能源管理中的应用.docx
- 项目管理理论在市政工程管理中的运用研究.docx
- 大数据时代下软件技术的发展和应用.docx
- 信息系统项目管理师第三版十大管理输入输出及管理工具技术.docx
- 机器学习(预测模型):Hacker News情感分析的数据集
- 数控加工工艺与编程项目六G符合循环教案.doc
- 大数据时代集团公司业财融合对财务共享的影响.docx
- 生活中的人工智能.docx
- 秒懂HTTPS技术接口.docx
- 明德小学教育信息化工作会议记录.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
