`
小懒蛋
  • 浏览: 31146 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

漫谈设计模式---策略模式

阅读更多

设计模式,我一直把设计模式想象成兵法,精妙的兵法可以结构化的、优雅的组织代码。以一种聪明的方式去实现功能,并且具有极强的可维护性。

说设计模式应该先从软件设计的思想说起,比如开闭原则,开:对扩展开放;闭:对修改关闭。这就需要什么呢?把不变的部分抽象出来并进行封装。软件设计还有一个原则叫做面向接口编程。接口是什么,这是我第一个想谈的东西,算是我想到所有东西的起点。接口,用书里的话来说就是一个标准,定义好这个标准之后,类库和客户端程序员就可以按照这个标准来进行开发,而不必关心实现的细节。从另一个角度来说,接口也是一个基类,所有实现此接口的细节实现都可以向上转型为这个基类,并为别人所用。下面开始我的“漫谈”,重口味啊,不喜勿进。

接口---标准也。什么事标准?就拿老丈人定义的标准来说,确切的说,一个适龄待嫁女青年的父亲给自己的女婿定义了一套标准:1、有房。2、有车。3、对自己女儿好。这就是一个接口其实,因为这是一套标准,只有实现了此标准(接口)的人才能成为他的女婿。

public House getHouse();
      public Car  getCar();
      public void takeCareOfGirl();
}
 

 这样,女婿就成为了一个接口,但是女婿不可以被实例化,不能说“他是一个女婿”,但是假如“小明”实现了女婿接口,并成为了老头的女婿,小明就可以向上转型为基类“女婿”,老头的女婿指向的就是小明了。这样有什么用呢?老头可以说,我要一个这样这样的女婿,有这这个女婿之后我可以调用女婿的这样这样的方法。

public class FatherInLaw{
     public void MarryMyDaughter (SonInLaw sonInLaw){
     House house = sonInLaw.getHouse();
     Car car = sonInLaw.getCar();
     sonInLaw.takeCareOfGirl();
     ……
     }
}
 

 可以看到FatherInLaw的嫁女儿的方法(marryMyDaughter)里必须要求传入一个女婿(SonInLaw)类,因为嫁女儿必须调用女婿的获得房子,获得小汽车,照顾女孩儿三个方法。这里岳父是不关心女婿其他的,只关心他是实现了那个女婿接口,也就是说可以向上转型为女婿。这也是面向对象设计的一个原则:面向接口编程。那么小明如果实现了接口,怎么去娶老头的女儿呢?

小明类:

public class Xiaoming implements SonInLaw{
   private Car car;
   public Car getCar(){
        return car;
   }
   private House house;
   public House getHouse(){
        return house;
   }
   public void tackCareOfGirl(){
        System.out.println("照顾女孩");
   }
}
 

下面是测试类:

 

public class TestSon{public static void main(String[] args){
       FatherInLaw fatherInLaw = new FatherInLaw();
       fatherInLaw.marryMyDaughter(new Xiaoming());
   }
}
 

 

 小明类就是一个实现了女婿接口的类,换句非程序的话说就是一个达到了老头嫁女儿标准的人。在测试类里,有一个岳父对象被初始化,之后调用此对象的嫁女儿方法,此方法需要传入一个实现了女婿接口的类,我们把小明穿进去,老头就成功的把女儿嫁出去了。

例子就说完整了。里边利用接口,使岳父不必关心女婿的细节实现,只是定义一个接口,实现我的接口就可以了。就是OO中的面向接口编程。并且这个例子里还有一个设计模式---策略模式。

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化----百度百科。

         这里的小明其实就是算法族中的一个,不仅可以有小明,还可以有小刚、小强、小白……只要他们实现了女婿接口,就可以传给岳父的嫁女儿方法。岳父是不关心具体的实现的(他不关心你是小强还是蟑螂),他只关心你是否实现了女婿接口。

           再回归文章开头说的原则:开闭原则,老头嫁女儿方法是不变的:有房有车疼女儿。女婿是可以变的--小明、小刚和小强,not at all。这里正是抽象并封装了不变的部分:嫁女儿方法。开放了扩展部分---各种女婿。

好了,今天就说道这吧。下次我准备写代理模式和适配器模式。小强们是怎样实现女婿接口的---拼爹,拼爹就是代理啊适配器啊,其实是小强他爹实现了女婿方法,小强不过是一个适配器罢了。哈哈~~

 

 

 

分享到:
评论
1 楼 yanmingkong 2012-08-24  
最后一段是精辟.

相关推荐

    漫谈设计模式代码

    《漫谈设计模式》这本书深入浅出地介绍了多种设计模式,通过代码实例帮助读者理解和应用这些模式。在这个压缩包“ramblingonpatterns-1.0”中,你将找到书中的代码示例,它们覆盖了各个章节的关键知识点。 1. **...

    漫谈设计模式.rar

    《漫谈设计模式》这本书以其独特的视角深入浅出地探讨了这一主题,尤其针对Java语言进行了详尽的阐述。在这个压缩包中,包含的文件“漫谈设计模式”可能是该书的电子版或者相关的学习资料。 设计模式的核心在于提高...

    《漫谈设计模式》—Java设计模式的好帮手

    《漫谈设计模式》是一本专为Java开发者深入理解设计模式而编写的书籍。设计模式是软件工程中的一种最佳实践,它们是针对常见问题的解决方案,经过时间和实践的考验,被广泛接受并应用于各种项目中。这本书对于提升...

    漫谈设计模式 (Java)

    《漫谈设计模式 (Java)》是一本专为Java开发者准备的设计模式指南,旨在帮助读者深入理解和应用面向对象编程(OOP)的核心理念。书中的内容涵盖了从基础的模式介绍到高级的创建对象、构建复杂结构、行为模式,以及...

    漫谈设计模式

    《漫谈设计模式》这本书是IT领域中关于软件设计的经典之作,主要涵盖了设计模式的核心概念以及在实际开发中的应用。设计模式是经验丰富的开发者在解决常见问题时形成的一套最佳实践,它们为软件设计提供了可复用的...

    设计模式 pdf

    《漫谈设计模式》这本书是IT领域中关于软件设计的经典之作,主要涵盖了设计模式的核心概念和实际应用。设计模式是经过长期实践证明的在特定情境下解决软件设计问题的通用可复用方案,它们是软件工程中的智慧结晶,...

    灸哥讲解创建型设计模式

    - 缓解缺陷可以通过使用策略模式或者依赖倒置原则,使设计更加灵活。 5. **建造者模式** - 建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - 常用于创建结构复杂的对象,如...

    灸哥讲解结构型设计模式

    1.5 缓解这种问题的方法是将大型门面拆分为多个小门面,或者使用策略模式来动态选择不同的子系统组合。 接着,是组合模式。2.1 组合模式允许我们以统一的方式处理对象和对象的集合,实现部分-整体的层次结构。2.2 ...

    创业计划书-市场调查研究漫谈

    根据研究发现,你可能需要调整产品定位,制定合适的定价策略,选择合适的销售渠道,甚至改变整个商业模式。 总的来说,"创业计划书-市场调查研究漫谈"这份资料涵盖了市场调查的全貌,从目标市场定义到策略制定,为...

    参考资料-(核心)漫谈PFC的原理与实现.zip

    综上所述,"漫谈PFC的原理与实现"这一主题涵盖了PFC技术的核心概念、分类、工作原理、控制策略及其优点和应用。通过深入学习和理解这些内容,我们可以更好地设计和优化电力系统的电源部分,提高整体的能效和稳定性。

    Windows之漫谈兼容内核

    总之,《Windows之漫谈兼容内核》将带你深入了解Windows内核在兼容性方面的设计与实现,无论是对于系统管理员还是软件开发者,都将从中受益匪浅。通过学习,你可以掌握如何利用Windows的内核特性解决实际工作中的...

    漫谈兼容内核(毛德操)

    《漫谈兼容内核》是毛德操先生对操作系统内核兼容性问题深入探讨的一部...毛德操先生的《漫谈兼容内核》无疑为我们揭示了这一复杂而微妙的技术世界,对于深入理解Windows系统以及操作系统设计原理有着重要的参考价值。

    漫谈求生之路的AI系统

    通过对玩家战术和策略的分析,AI可以逐渐适应并预测玩家的动作,这在多人对战模式中尤其明显,提高了对抗的激烈程度和策略深度。 为了实现这样的AI系统,开发者运用了多种技术,如行为树(Behavior Trees)、有限...

    计算机缓存漫谈

    其中,LRU是广泛使用的策略,因为它能较好地预测未来访问模式。地址映射方法有直接映射、组关联映射和全关联映射,它们决定了缓存中数据的位置。 在编程中,我们可以通过多种方式利用缓存,例如在Web开发中使用HTTP...

    基于“信息技术与课程整合”的课堂教学设计漫谈.pptx

    【教学设计的问题】在进行教学设计时,教师需要考虑诸如课程目标、教学策略、媒体选择、活动设计、评估方法等多方面因素,确保所有的设计都围绕着教学目标进行,从而实现课程的优化。 总的来说,基于“信息技术与...

    rambling-on-design-patterns

    本书《设计模式漫谈》可能涵盖了以下一些关键的设计模式: 1. **创建型模式**:这类模式主要关注对象的创建,如单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者...

    大嘴巴漫谈数据挖掘和解析卷积神经网络

    在《解析卷积神经网络》这本书中,可能详细阐述了CNN的架构、训练过程、优化策略以及在图像识别、语音识别、自然语言处理等领域的应用实例。 数据挖掘和卷积神经网络的结合,使得我们可以从海量数据中自动识别出...

    [精选]品管系统与手法漫谈.pptx

    【品管系统与手法漫谈】的PPT探讨了质量管理在企业中的重要性和实施策略,主要涵盖以下几个核心知识点: 1. **品质的理解**:品质不仅仅是产品的质量,也包括个人的行为品质和企业的整体品质,旨在满足不同客户的...

Global site tag (gtag.js) - Google Analytics