当前位置: 首页 > news >正文

个人域名怎么做社交网站网站友情链接很重要吗

个人域名怎么做社交网站,网站友情链接很重要吗,3d建模怎么做,厦门国外网站建设公司状态模式 允许对象在内部状态改变时改变它的行为#xff0c;对象看起来好像修改了它的类。 模型说明 上下文 #xff08;Context#xff09; 保存了对于一个具体状态对象的引用#xff0c; 并会将所有与该状态相关的工作委派给它。 上下文通过状态接口与状态对象交互对象看起来好像修改了它的类。 模型说明 上下文 Context 保存了对于一个具体状态对象的引用 并会将所有与该状态相关的工作委派给它。 上下文通过状态接口与状态对象交互 且会提供一个设置器用于传递新的状态对象。 状态 State 接口会声明特定于状态的方法。 这些方法应能被其他所有具体状态所理解 因为你不希望某些状态所拥有的方法永远不会被调用。 具体状态 Concrete States 会自行实现特定于状态的方法。 为了避免多个状态中包含相似代码 你可以提供一个封装有部分通用行为的中间抽象类。 状态对象可存储对于上下文对象的反向引用。 状态可以通过该引用从上下文处获取所需信息 并且能触发状态转移。 上下文和具体状态都可以设置上下文的下个状态 并可通过替换连接到上下文的状态对象来完成实际的状态转换。 优缺点 1.优点 单一职责原则: 将与特定状态相关的代码放在单独的类中。开闭原则: 无需修改已有状态类和上下文就能引入新状态。通过消除臃肿的状态机条件语句简化上下文代码。 2.缺点 如果状态机只有很少的几个状态或者很少发生改变那么应用该模式可能会显得小题大作。 使用场景 如果对象需要根据自身当前状态进行不同行为同时状态的数量非常多且与状态相关的代码会频繁变更的话可使用状态模式。如果某个类需要根据成员变量的当前值改变自身行为从而需要使用大量的条件语句时可使用该模式。当相似状态和基于条件的状态机转换中存在许多重复代码时可使用状态模式。 参考代码 一台自动售货机上使用状态设计模式: 有商品 has­Item无商品 no­Item商品已请求 item­Requested收到纸币 has­Money 同时 自动售货机也会有不同的操作。 再一次的 为了简单起见 我们假设其只会执行 4 种操作 选择商品添加商品插入纸币提供商品 // vendingMachine.go 自动售货机 package mainimport fmttype VendingMachine struct {hasItem StateitemRequested StatehasMoney StatenoItem StatecurrentState StateitemCount intitemPrice int }func newVendingMachine(itemCount, itemPrice int) *VendingMachine {v : VendingMachine{itemCount: itemCount,itemPrice: itemPrice,}hasItemState : HasItemState{vendingMachine: v,}itemRequestedState : ItemRequestedState{vendingMachine: v,}hasMoneyState : HasMoneyState{vendingMachine: v,}noItemState : NoItemState{vendingMachine: v,}v.setState(hasItemState)v.hasItem hasItemStatev.itemRequested itemRequestedStatev.hasMoney hasMoneyStatev.noItem noItemStatereturn v }func (v *VendingMachine) requestItem() error {return v.currentState.requestItem() }func (v *VendingMachine) addItem(count int) error {return v.currentState.addItem(count) }func (v *VendingMachine) insertMoney(money int) error {return v.currentState.insertMoney(money) }func (v *VendingMachine) dispenseItem() error {return v.currentState.dispenseItem() }func (v *VendingMachine) setState(s State) {v.currentState s }func (v *VendingMachine) incrementItemCount(count int) {fmt.Printf(Adding %d items\n, count)v.itemCount v.itemCount count } // state.go 状态接口 package maintype State interface {addItem(int) errorrequestItem() errorinsertMoney(money int) errordispenseItem() error } // noItemState.go 无商品状态 package mainimport fmttype NoItemState struct {vendingMachine *VendingMachine }func (i *NoItemState) requestItem() error {return fmt.Errorf(Item out of stock) }func (i *NoItemState) addItem(count int) error {i.vendingMachine.incrementItemCount(count)i.vendingMachine.setState(i.vendingMachine.hasItem)return nil }func (i *NoItemState) insertMoney(money int) error {return fmt.Errorf(Item out of stock) } func (i *NoItemState) dispenseItem() error {return fmt.Errorf(Item out of stock) } // hasItemState.go 有商品状态 package mainimport fmttype HasItemState struct {vendingMachine *VendingMachine }func (i *HasItemState) requestItem() error {if i.vendingMachine.itemCount 0 {i.vendingMachine.setState(i.vendingMachine.noItem)return fmt.Errorf(No item present)}fmt.Printf(Item requestd\n)i.vendingMachine.setState(i.vendingMachine.itemRequested)return nil }func (i *HasItemState) addItem(count int) error {fmt.Printf(%d items added\n, count)i.vendingMachine.incrementItemCount(count)return nil }func (i *HasItemState) insertMoney(money int) error {return fmt.Errorf(Please select item first) } func (i *HasItemState) dispenseItem() error {return fmt.Errorf(Please select item first) } // itemRequestedState.go 请求商品 package mainimport fmttype ItemRequestedState struct {vendingMachine *VendingMachine }func (i *ItemRequestedState) requestItem() error {return fmt.Errorf(Item already requested) }func (i *ItemRequestedState) addItem(count int) error {return fmt.Errorf(Item Dispense in progress) }func (i *ItemRequestedState) insertMoney(money int) error {if money i.vendingMachine.itemPrice {return fmt.Errorf(Inserted money is less. Please insert %d, i.vendingMachine.itemPrice)}fmt.Println(Money entered is ok)i.vendingMachine.setState(i.vendingMachine.hasMoney)return nil } func (i *ItemRequestedState) dispenseItem() error {return fmt.Errorf(Please insert money first) } // hasMoneyState.go 收到钱 package mainimport fmttype HasMoneyState struct {vendingMachine *VendingMachine }func (i *HasMoneyState) requestItem() error {return fmt.Errorf(Item dispense in progress) }func (i *HasMoneyState) addItem(count int) error {return fmt.Errorf(Item dispense in progress) }func (i *HasMoneyState) insertMoney(money int) error {return fmt.Errorf(Item out of stock) } func (i *HasMoneyState) dispenseItem() error {fmt.Println(Dispensing Item)i.vendingMachine.itemCount i.vendingMachine.itemCount - 1if i.vendingMachine.itemCount 0 {i.vendingMachine.setState(i.vendingMachine.noItem)} else {i.vendingMachine.setState(i.vendingMachine.hasItem)}return nil } // main.go 客户端 package mainimport (fmtlog )func main() {vendingMachine : newVendingMachine(1, 10)err : vendingMachine.requestItem()if err ! nil {log.Fatalf(err.Error())}err vendingMachine.insertMoney(10)if err ! nil {log.Fatalf(err.Error())}err vendingMachine.dispenseItem()if err ! nil {log.Fatalf(err.Error())}fmt.Println()err vendingMachine.addItem(2)if err ! nil {log.Fatalf(err.Error())}fmt.Println()err vendingMachine.requestItem()if err ! nil {log.Fatalf(err.Error())}err vendingMachine.insertMoney(10)if err ! nil {log.Fatalf(err.Error())}err vendingMachine.dispenseItem()if err ! nil {log.Fatalf(err.Error())} } output: Item requestd Money entered is ok Dispensing ItemAdding 2 itemsItem requestd Money entered is ok Dispensing Item
http://www.hkea.cn/news/14573053/

相关文章:

  • 网站建设mus18wordpress模板地址
  • 免费做试卷的网站教育门户网站建设
  • 网站建设 国风网络wordpress新建页面文章列表
  • 手机app与电脑网站的区别营销型企业网站建设应遵守的原则
  • 教育培训网站源码建e网是干嘛的
  • 自己做网站 空间怎么买成都旅游住哪里最方便
  • 成都房产信息查询官方网站网站标题字体大小
  • 工信部网站备案举报c语言精品课程网站开发
  • 莘县网站建设价格淮南app
  • 建网站 就能开店一起做网店白沟
  • 网站建设叁金手指花总6中国网站建设公司有哪些
  • 个人网站备案网站名称比wordpress好用
  • 有没有专门做航拍婚礼网站注册域名的常见问题
  • 公司网站建设费用会计入账免费网站建设方案优化
  • 织梦网站搬家数据库网站开发支付模块
  • 济南建设网点电话网站优化人员通常会将目标关键词放在网站首页中的
  • 建设一个企业网站到底要多少钱wordpress 同分类评论调用
  • 做视频网站带宽建设工程合同的形式
  • 怀化做网站网络营销有本科吗
  • 西红柿怎么做网站广东省建站公司
  • 吉林做网站找谁010网站建设
  • 做网站公司 汉狮网络小米发布会13
  • 订票网站开发公司建设工程用地批准手续在哪个网站
  • 游戏网站建设网新能源课件网站开发新能源
  • 怎么进入微信官方网站微信分销平台系统
  • 凡科建站代理商登录沈阳京科医院男科
  • 做单页网站怎么选产品wordpress怎么打删除线
  • 龙岩人自己的网站兰州网站建设公司
  • 公司建设网站费用怎么记账企业oa办公软件
  • 专门做团购的网站有哪些天津市做公司网站的公司