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

做网站外包好吗dede网站禁止ip访问

做网站外包好吗,dede网站禁止ip访问,国内外做的比较好的家装网站,莆田哪里有学做网站的在软件开发的世界里,设计模式如同工匠手中的精良工具,能帮助开发者打造出结构清晰、易于维护和扩展的软件系统。状态模式和策略模式便是其中两个常用却容易让人混淆的设计模式。接下来,我们会详细剖析它们的区别、适用场景,并给出…

在软件开发的世界里,设计模式如同工匠手中的精良工具,能帮助开发者打造出结构清晰、易于维护和扩展的软件系统。状态模式和策略模式便是其中两个常用却容易让人混淆的设计模式。接下来,我们会详细剖析它们的区别、适用场景,并给出 Python 代码示例。

状态模式与策略模式的区别

核心差异

  • 状态模式:聚焦于对象状态管理。如同人的情绪状态会影响行为,软件中的对象在状态改变时,行为也会相应改变。状态模式把状态和状态转换规则封装在状态类中,使状态与行为紧密相连。
  • 策略模式:着重于算法封装与替换。就像出行有步行、骑车、公交等多种方式,策略模式将不同算法封装,可按需灵活切换,且算法变化不影响使用它的客户端。

结构与使用差异

  • 状态模式:状态转换通常由对象内部状态决定,有固定规则。使用时,客户端只需与对象交互,无需关心状态转换细节。
  • 策略模式:策略选择由客户端主动决定,策略间相互独立,无特定转换关系。

关系差异

  • 状态模式:状态是对象属性,状态改变影响行为。状态类常持有对象引用,便于状态转换时操作对象。
  • 策略模式:策略是独立于对象的算法,对象可动态选择策略。策略类一般不持有对象引用,仅执行算法。

适用场景

状态模式适用场景:红绿灯系统

当对象的行为依赖于其状态,并且状态转换逻辑较为复杂时,状态模式就非常适用。以红绿灯系统为例,红绿灯有红、黄、绿三种状态,每种状态下对应的行为不同,且状态之间的转换有严格的规则。

  • 红灯亮起时,车辆和行人必须停止,经过一段时间后会转换为绿灯。
  • 绿灯亮起时,车辆和行人可以通行,一段时间后会转换为黄灯。
  • 黄灯亮起时,提醒车辆和行人准备停止,之后又会变为红灯。
# 定义信号灯状态基类
class TrafficLightState:def display(self):passdef change_state(self, light):pass# 红灯状态类
class RedLightState(TrafficLightState):def display(self):print("红灯亮,车辆和行人停止")def change_state(self, light):light.set_state(GreenLightState())# 绿灯状态类
class GreenLightState(TrafficLightState):def display(self):print("绿灯亮,车辆和行人通行")def change_state(self, light):light.set_state(YellowLightState())# 黄灯状态类
class YellowLightState(TrafficLightState):def display(self):print("黄灯亮,准备停止")def change_state(self, light):light.set_state(RedLightState())# 红绿灯类
class TrafficLight:def __init__(self):self.current_state = RedLightState()def set_state(self, state):self.current_state = statedef operate(self):self.current_state.display()self.current_state.change_state(self)# 使用示例
traffic_light = TrafficLight()
traffic_light.operate()
traffic_light.operate()
traffic_light.operate()

策略模式适用场景:会员等级系统

当存在多种算法可以实现同一个任务,并且为了避免使用复杂的条件判断语句时,策略模式是很好的选择。在电商的会员等级系统中,不同等级的会员享受不同的权益,例如不同的折扣和积分规则。

  • 青铜会员可能享受 9 折优惠。
  • 白银会员可能享受 8.5 折优惠。
  • 黄金会员可能享受 8 折优惠。
# 定义会员折扣策略基类
class MemberDiscountStrategy:def calculate_discount(self, price):pass# 青铜会员折扣策略类
class BronzeMemberDiscount(MemberDiscountStrategy):def calculate_discount(self, price):return price * 0.9# 白银会员折扣策略类
class SilverMemberDiscount(MemberDiscountStrategy):def calculate_discount(self, price):return price * 0.85# 黄金会员折扣策略类
class GoldMemberDiscount(MemberDiscountStrategy):def calculate_discount(self, price):return price * 0.8# 会员类
class Member:def __init__(self, strategy):self.discount_strategy = strategyself.total_spent = 0def set_discount_strategy(self, strategy):self.discount_strategy = strategydef calculate_final_price(self, price):final_price = self.discount_strategy.calculate_discount(price)self.total_spent += final_priceself.upgrade_member()return final_pricedef upgrade_member(self):if self.total_spent >= 500 and isinstance(self.discount_strategy, BronzeMemberDiscount):self.set_discount_strategy(SilverMemberDiscount())print("恭喜您,升级为白银会员!")elif self.total_spent >= 1000 and isinstance(self.discount_strategy, SilverMemberDiscount):self.set_discount_strategy(GoldMemberDiscount())print("恭喜您,升级为黄金会员!")# 使用示例
product_price = 200
bronze_member = Member(BronzeMemberDiscount())
print(f"青铜会员第一次购买该商品的价格: {bronze_member.calculate_final_price(product_price)}")
print(f"青铜会员第二次购买该商品的价格: {bronze_member.calculate_final_price(product_price)}")
print(f"青铜会员第三次购买该商品的价格: {bronze_member.calculate_final_price(product_price)}")
print(f"青铜会员第四次购买该商品的价格: {bronze_member.calculate_final_price(product_price)}")
print(f"青铜会员第五次购买该商品的价格: {bronze_member.calculate_final_price(product_price)}")

状态模式 vs 策略模式:核心区别对比

比较维度状态模式策略模式
意图对象行为根据状态变化而变化封装算法,使其可互换
状态/策略持有者通常由上下文类持有状态对象策略由客户端或上下文类指定
是否依赖上下文状态通常依赖上下文,可改变其状态策略一般不改变上下文
状态之间转换状态之间可能自动转换策略不会自动切换
常见用途状态机、UI状态、流程控制算法选择、行为抽象、决策逻辑

总结

状态模式和策略模式虽然有相似之处,但设计目的和适用场景有明显区别。状态模式适用于管理对象状态以及状态变化时的行为,策略模式适用于封装和替换算法。在实际开发中,需要根据具体需求选择合适的模式,以提高代码的可维护性和可扩展性。希望通过本文和示例,你能更好地理解和运用这两种设计模式。

选择建议:

  • 如果你的对象在生命周期中会根据状态执行不同逻辑,并且状态会改变,就用状态模式
  • 如果你希望灵活地选择行为,而不关心状态,就用策略模式

文章转载自:

http://O4yCv7nu.zbqry.cn
http://NTJcUhIS.zbqry.cn
http://aPuDnnba.zbqry.cn
http://pnCFP7nq.zbqry.cn
http://DuAdkXYk.zbqry.cn
http://9NNurttc.zbqry.cn
http://FGpfVtKS.zbqry.cn
http://cliufnST.zbqry.cn
http://RIvUshqQ.zbqry.cn
http://y3oXUqwc.zbqry.cn
http://1POYA4o4.zbqry.cn
http://mCsMmMok.zbqry.cn
http://uiXQ8hz3.zbqry.cn
http://ipLy59Uo.zbqry.cn
http://2RziqhzE.zbqry.cn
http://7xyYqkdu.zbqry.cn
http://2aJrWxDB.zbqry.cn
http://D2ukecWR.zbqry.cn
http://SAATd2wK.zbqry.cn
http://xrPnY5cZ.zbqry.cn
http://igzBbkfL.zbqry.cn
http://XiKKQ5qX.zbqry.cn
http://nOAchqUM.zbqry.cn
http://ic4449Dm.zbqry.cn
http://2LDpwz3q.zbqry.cn
http://E9Dglwvo.zbqry.cn
http://2752rzet.zbqry.cn
http://JqwVzq8G.zbqry.cn
http://GpTZ6ZFP.zbqry.cn
http://Io5gqgdM.zbqry.cn
http://www.dtcms.com/wzjs/668302.html

相关文章:

  • 传媒公司网站建设费入什么科目网站死链怎么解决
  • 网站根目录多文件网站建设跟网站开发有什么区别吗
  • 网站建设报价单 非常好用的报价模板.docwordpress搭建知识库
  • 营销型网站的盈利模式权威网站有哪些
  • 门户网站怎么做在工商局网站怎么做清算
  • 西安seo优化公司深圳网站营销seo多少费用
  • 自己建设手机网站西安网站建设APP开发
  • 建设银行网站买手机软件开发找工作哪里找
  • 龙岩市建设局网站网站的后台
  • 深圳网站建设的黑镜wordpress主题破解
  • 杭州网站建设提供商wordpress收不到邮箱验证码
  • 南宁百度做网站多少钱dedecms 网站导航
  • 域名未做运行网站解析北京的设计公司排名
  • 专业的建设网站哪个好wordpress主题语言包
  • 如何做优酷网站点击赚钱做英文网站需要哪些东西
  • 免费的个人空间建网站如何做网站的链接结构
  • 高级网站开发培训温州建设集团有限公司网站首页
  • 如何做网站的维护保定制作公司网站
  • 如何做网站活动相亲网站做推广的照片是谁
  • 用什么做网站后台广东微信网站制作公司
  • 东莞有什么做网站的公司云谷 网站建设
  • 网站做视频的软件叫什么html5高端红色织梦网络公司网站
  • 广州网站建设 推广公司专业 网站建设
  • 如何查看网站的关键词做网站宣传
  • 泰安网站推广优化科技数码app排名
  • 帮别人做违法网站会怎么样做任务领q币网站
  • 2017网站设计尺寸深圳网站设计公司费用
  • 企业网站建设需要哪些软件广州天河区是富人区吗
  • 阿联酋网站后缀百度竞价排名模式
  • 建站超市郑州网站推广专员