`
zhenglu119
  • 浏览: 1273 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

我眼中的设计模式--策略模式

阅读更多
作为开篇。有必要说明下。写文章不是我的强行,只是作为一个记录而已

     首先 对于策略模式给一个定义吧!策略模式:定义了算法簇,分别对其进行了封装,他们之间可以互换。这样做的话,可以让算法的变化独立于算法的客户端!

    这里先举一个鸭子的实例。对于一个鸭子,他有很多行为,比如叫,飞行,但不同种类的的鸭子,它有不同的行为。所以可能会有下面这种做法

package com.ssh.exercise; 
 
public class Duck { 
     
     
     public void swim() { 
        System.out.println("所有鸭子都会游泳!"); 
    } 
     
     public void quack(){ 
         System.out.println("quack"); 
     } 
      
     public void fly(){ 
         System.out.println("fly"); 
     } 
      



具体的实例去实现覆盖对应的方法,如下面的代码所示: 

package com.ssh.exercise; 
 
public class WoodDuck extends Duck{ 
 
    @Override 
    public void quack() { 
        System.out.println("呱呱叫"); 
    } 
 
    @Override 
    public void fly() { 
        System.out.println("木头鸭不会叫"); 
         
    } 
     
     
 
}



但这样做的结果是:为了复用的目的而使用继承,反而效果不佳,一来并不是所有子类都具备超类的行为,代码在多了子类中重复,也很难知道所有鸭子的全部行为,运行时行为不容易改变,改变一个,会造成其他鸭子不想要的改变!
看到这里,你可能会想到把fly,quack从超类中单独出去,定义flyable,quackable的接口,子类来实现。虽然这样的做法,可以解决一部分的问题,但只是从一个噩梦到另外一个噩梦,想想,java是单继承的,如果,在会飞的鸭子里面,飞行动作又有其他变化呢。会不会造成代码无法复用,如果有很多子类,那么去修改那么多子类的飞行或者叫的行为不觉得很麻烦么? 
想想开篇的定义,定义算法族,就是把可变化的东西提取出来,封装!

那我们就可以如下做:先定义fly和quack的接口,不同的飞行行为,或者喊叫的行为去实现对应的接口,这样一来对于不同的鸭子,就只要实现行为的实现类就可以了,代码比较简单。我就不贴了。

策略模式的设计原则:找出应用中可能需要变化之处,把他们独立起来,不要和那些不需要变化的代码混合在一起。尽量针对接口编程。不要针对实现编程,多用组合,少用继承
分享到:
评论

相关推荐

    我眼中产品经理的基本素质-李勇瑞.ppt

    产品经理是企业中的关键角色,他们负责推动产品的设计、开发和市场推广,确保产品能满足用户需求并为企业带来商业价值。在李勇瑞的观点中,产品经理的基本素质涵盖了多个方面,以下是这些素质的详细阐述: 1. 激情...

    定格2021 各行业学者专家眼中的网站设计.docx

    - 他指出,随着响应式设计模式在音频/视频、导航、表单、广告等各个方面的应用,网页设计正朝着更加实用和高效的方向发展。 **意义:** - 设计师们越来越意识到,除了视觉美感之外,还需要关注网站的功能性和实用性...

    SOHO中国营销模式分析.docx

    总体而言,SOHO中国的营销模式是商业地产领域的一次创新尝试,它突破了传统的商业地产开发模式,通过独特的销售策略和对建筑设计的重视,在竞争激烈的市场中找到了自己的定位,实现了快速盈利。尽管存在争议,但SOHO...

    餐饮行业商业模式.doc

    在当今经济体系中,餐饮业扮演着重要的角色,它不仅是人们日常生活的基本需求,也是投资者眼中的“掘金热土”。中国餐饮市场的蓬勃发展态势,带动了市场内部竞争的加剧。在这样一个多变的环境中,餐饮企业若想在激烈...

    我眼中的大数据.doc

    这些数据可以帮助医生进行更有效的早期诊断,并制定更精准的疾病预防策略。大数据分析还能够帮助医疗机构合理配置资源,预测疾病流行趋势,从而提高公共卫生应对的效率。在保险行业,利用大数据进行风险评估和保险...

    初中语文深度学习指导策略.pdf

    一个有效的教学模式是“师生活动——生与文本活动——生生活动”的交替进行,这其中,可以实施“1+1+2+1”的小组学习模式,即在小组中特别关注优秀生和后进生的发展,让每个学生都能在各自层次上获得最优化的进步。...

    新课改背景下的小学道德与法治教学策略探讨.docx

    比如,在教授“我是独特的”这一主题时,教师可以组织“猜猜他是谁”、“我眼中的他”等活动,让学生认识到每个人的独特性,激发他们的自尊心和自信心,进而培养健康的心理素质。 其次,深度化教学策略强调对课本...

    广西钦州年年丰广场广告推广策略提案_94页_XXXX年.pptx

    钦州市,作为我国南方的一颗璀璨明珠,正以其独特的海滨城市特色和日益凸显的区域优势,成为投资者和消费者眼中的新星。位于此地的年年丰广场,作为重要的商业地产项目,如何把握城市发展脉搏,制定出具有前瞻性和...

    面向云服务的用户体验设计研究及实践.pdf

    面向云服务的用户体验设计研究主要关注互联网背景下的服务设计模式,特别强调用户体验的核心地位。随着互联网技术的快速发展,企业服务的领域不断扩展,业务量和数据存储量随之大幅增长。互联网服务的主流趋势正从...

    思想品德课堂生活化策略探索

    其次,在课堂实施环节,教师应采取生活化的策略,如使用贴近学生生活的案例进行课程导入,利用小组合作学习的教学模式,鼓励学生自主学习和合作探究。此外,教师还应该设置生活化情景,让学生通过情景剧等形式,亲身...

    淋浴房行业(2021-2026)企业市场突围战略分析与建议.docx

    这可能包括提供独特的产品特性、打造独特的品牌形象,或者采用差异化的营销策略,使企业在消费者眼中区别于其他品牌。 综上所述,淋浴房行业的企业要想在2021-2026年期间实现市场突围,必须综合运用战略理念、市场...

    小游戏源码-每个人的性格都有独特的味道,在别人眼里你是什么味道呢?.rar

    通过分析这个源码,我们可以学习游戏开发的各个方面,包括编程技巧、设计模式和最佳实践。同时,对于初学者来说,这是一个很好的实践项目,可以加深对编程和游戏开发的理解。对于经验丰富的开发者,可以研究源码中的...

    小学语文阅读教学与写作教学联动策略探究.docx

    学生在写作“我眼中的阅兵”时,可以从不同的视角出发,这不仅锻炼了他们的写作技巧,也深化了他们的爱国情怀。 总的来说,小学语文教学应重视阅读与写作的联动,通过多样化的教学策略,如以读促写、寻找结合点和...

    高中历史之教学教研“我眼中的武则天”辩论课教学设计素材

    7. **教学策略**:教师引导学生超越教材,利用校本课程和社区资源,补充教学内容,激发学生的学习热情,体现了“用教材教,而非教教材”的教育理念。 8. **学生能力培养**:此次活动不仅提升了学生的历史知识,还...

    菜鸟PM眼中的道与术.pdf

    "菜鸟PM眼中的道与术" 本篇文章从一个菜鸟赛季产品经理的视角,讨论了产品经理的“道”和“术”。其中,“道”指世界观,即产品经理如何看待自己的世界;“术”指方法论,即产品经理如何做好自己的工作。 首先,...

    面向接口编程,解析隐藏其背后的面向接口思想

    在实际开发中,接口常用于实现设计模式,如策略模式、工厂模式等。例如,策略模式中,定义一个策略接口,然后为不同的策略实现该接口,这样在运行时可以根据需要动态选择并切换策略,而不会影响使用策略的客户端代码...

    2012-2013学年第一学期英语教学工作计划.doc

    - **眼中有学生**:了解学生个体差异,设计个性化教学,确保每个学生都能在教学中受益。 - **手中有方法**:选择合适的方法和模式,激发学生学习积极性,注重情感互动,避免无效讲解。 3. **落实教学中的精巧和...

    【创新创业材料】房地产高层商业住宅混合项目-可行性研究报告.zip

    特别是高层商业住宅混合项目,以其独特的市场定位和多元化的盈利模式,成为了许多大学生创业者眼中的新星。本报告《房地产高层商业住宅混合项目----可行性研究报告.zip》深入探讨了该类项目的市场需求、投资成本、...

Global site tag (gtag.js) - Google Analytics