`
luzl
  • 浏览: 571561 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

设计模式--琢磨推敲

    博客分类:
  • Java
阅读更多
分类:
  创建模式
  结构模式
  行为模式

尤点:
  面向界面(client更易于操作)
  降低耦合度(维护更加容易,修改部分代码不需要修改全部相关代码)
  增加灵活度(client调用灵活,修改代码,维护代码灵活)

详细点:
  创建模式
  简单工厂模式:
  使用工厂类将客户和客户所请求的类分开,这样客户只需要像工厂类请求就可以了。
 
  该模式的缺点是如果新增加被消费类(被请求类)的话,需要修改工厂类。但是如果你能确定被消费类的参数的话,可以借助一些配置解决这个缺陷,把类名和参数类型配置到数据库或者XML文件中,使用反射生成被消费类。
  
  工厂方法模式(抽象工厂模式):
  不负责创建具体的被消费类,而是仅仅指出工厂类需要实现那些方法,所以它是针对工厂模式的抽象设计。

  Builder模式
  假设你倒一杯水分为以下几步:1.选择杯子(大杯,还是小杯),2.加入饮料(白开水,可乐,果汁).
  你可以把这两个步骤抽象为一个接口:builderDrinking,然后你可以生成几个类:白开水类,可乐类,果汁类,分别实现这个接口的这两个步骤。为了给client统一接口,再写一个Direct类,这个类接受实现builderDrinking这个接口的类,并且进行组装:
 public interface BuilderDrinking{
   public void chooseCup();
   public void fillIn();
  }
  
  public class plainWater implemets BuilderDrinking{
   public vlid chooseCup(){
      System.out.println("Choose cup");
   }

   public void fillIn(){
      System.out.println("fill cup");
   }
  }
 
  public class Director(){
     private BuilderDrinking builder=null;

     public Director(BuilderDrinking builder){
          builder=builder;
     }
     
     
     public void getDrinking(){
        this.builder.ChooseCup();
        this.builder.fillIn();
     }
  }


  原型模式(prototype)
  原型模式的意思是创建一个包括所有常用信息的类,然后让这个类实现克隆接口,当你要使用这些信息时,只需要克隆一下就行了。
 
  单例(Singleton)
  为了确保一个类在整个application中只有一个实例,那么就要实现单态(SingleTon),大概就是定义一个私有成员变量,类型是类本身,然后定义个getInstance方法,由该方法返回这个成员变量,给这个成员变量赋值有两种形式,一种是在定义的时候直接赋值,另外一种是在getInstance方法做一个判断,如果该变量为null则赋值,当然,我们这里所赋得值是:new SingleTon()--这里假设你定义的单态类名字是SingleTon.
  
  
  结构模式
  适配器模式(Adapter)
  两个类(一般来说没有源代码,意思是我们不能修改源代码)没有统一接口,但是需要通信,这时候就需要用到适配器,适配器能够对传递的参数和返回的参数做适当的处理,使得通信能够进行,这个是为了能够增加耦合。

  桥接模式(Bridge)
  为了降低耦合度,将抽象和实现分离,使得他们能够独立的变化.在软件工程中抽象和实现使用组合和聚合而不是继承,使得两者能够独立的变化.

  合成模式(composite)
  将对象组织到树型结构中,以树的结构来表现整体和部分的关系.合成模式就是处理树形结构对象的模式。合成模式将部分与整体的关系用树形结构表现出来。
  合成模式将一个个单独的成员对象和由他们组合而成的合成对象同等看待。


  装饰模式(Decorator)
  以对客户透明的方式扩展对象功能,是继承关系的替代方案,比继承更加灵活,可以动态增加一些功能也可以动态撤销,增加由一些基本功能排列组合而成非常大量的功能。


  门面模式(Facade)
  外部系统与一个子系统的通信必须通过一个统一的门面对象进行,门面模式提供一个高层次的接口,使得子系统更易于使用。每个子系统只能有一个门面类,而且此门面只能有一个实例,所以它应该是单态,但是一个系统可以有多个门面类。

  享元模式(FlyWeight)
  FlyWeight是拳击比赛中的名词,指的是最轻量级选手,它所要解决的问题是减少系统中创建的实例(使用cache技术)从而减少内存的使用。它以共享的方式高效的支持大量的细粒度对象。
    它能做到共享的关键是区分内蕴状态和外蕴状态,内蕴状态存在享元内不会随着环境的变化而变化,外蕴状态随环境的改变而改变。外蕴状态不会影响内蕴状态,他们之间相互独立。
   将可以共享的状态和不可以共享的状态从常规类中区分开来,去掉不可以共享的状态。这样就形成了共享元类。
   客户端不可以直接创建被共享的对象,而是由工厂对象负责创建。

  代理模式(Proxy)
  代理就是一个人或一个机构代理另外一个人或机构采取行动。
  创建一个对象来操作另外一个对象,这个对象就叫做被代理对象的代理对象,这种设计模式就叫做代理模式。
  有些情况下客户不允许或者不想直接引用目标对象(降低耦合度,有改动只需要改动proxy就可以了),代理对象可以起到中介作用。
  客户端分辨不出代理主题对象和真实主题对象。
  代理对象可以不知道被代理对象,而是仅仅知道一个被代理对象的接口,这时候代理对象不能够直接创建被代理对象,被代理对象必须由系统的其他角色创建并代为传入。(你只能访问接口,说明权限小嘛,当然不能创建被代理对象了,如果能创建被代理对象,怎么能够只能访问接口呢?)

  行为模式
  责任链模式(Chain Of Responsibility)
  每个对象都有一个对其它对象的引用,这样就形成了一个对象链。请求在这个链上传递,直到某一个对象对它进行处理。
  客户并不知道是那个对象处理了它的请求,所以系统可以在不影响客户的情况下重新组织链和分配责任。
  处理者有两个选择处理或者传把请求传递给它所引用的其他对象,一个请求可以不被任何对象处理。

  解释器模式(Interpreter)
  给定一种语言后,解释器可以给出其文法的一种表示,并且提供一种解释器.
  客户端可以使用解释器来解释该语言中的句子.
  解释器模式将描述在有了一个简单的文法后,使用模式设计解释这些句子.
  解释器模式提到的语言是任何解释器对象能够解释的任何组合.
  在解释器模式中需要定义一个代表文法的命令类的等级结构,也就是组合规则.
  每个命令都有一个解释方法,代表对命令对象的解释.
  等级结构中命令对象的任何组合都是一种语言.

  迭代模式(Iterator)
  多个对象聚在一起形成的对象叫做聚集,聚集对象是包括一组对象的容器对象。
  迭代模式能够顺序访问聚集中的对象而不暴露聚集的内部表象。
  迭代模式将迭代对象封装到一个独立的子对象中,从而与聚集本身隔离。
  迭代模式简化了聚集的界面,每一个聚集对象都可以有一个或一个以上的迭代对象,每个迭代对象的状态是彼此独立的,迭代算法可以独立于聚集角色而变化(即不同的聚集对象有不同的迭代算法)

  调停模式(Mediator)
  封装了一系列对象相互作用的方式,使得这些对象不能直接相互作用。从而实现松散耦合,当某些对象间的相互作用发生改变时不会立即影响其他对象间的相互作用。以保证这些对象间能够独立变化。调停模式将多对多的相互作用转换为一对多的相互作用。
  适配器(Adapter)模式主要是为了能够使两者能够通信,因为他们之间的参数接受传递不统一。调停模式解决的问题是降低各个对象间相互作用的耦合度,使得他们能够独立变化。关系也比适配器模式复杂是一对多和多对一。

  备忘录模式(memento)
  备忘录对象是一个用来存储另外一个对象的内部状态快照的对象。
  备忘录模式的用意是在不破坏封装的前提下捕获对象的状态并外部化,存储起来,从而在适当的时候可以将这个对象恢复到存储起来的状态。

  观察者模式(Observer)
  观察者模式定义了一对多的依赖关系,让多个观察者对象同时监听某一主题对象。当这一主题对象的状态发生改变时会自动通知其他观察者对象,让他们自动更新自己。

  状态模式(state)
  不同的状态,不同的行为。
  将行为包装在不同的状态对象类里面,为每个状态创建不同的子类,当状态改变时便选择不同的子类。
 
  策略模式(Strategy)
  策略模式针对一组算法或者行为定义一个借口,然后各种算法或者行为由不同的类实现,这样他们可以相互替换。它使得算法或者行为能够在不影响客户端的情况下发生变化。
  策略把环境和行为分开,环境类负责查询和维护策略类,各种算法或者行为在策略类中提供。
  由于策略和环境分开,使得算法的改变不会影响环境和客户端。

  模板模式(Template)
  模板模式准备一个抽象类,将部分逻辑以具体方法及构造体的形式实现,然后申明一些抽象方法,迫使子类实现剩余的逻辑。不同的子类对抽象方法有不同的实现,从而使得剩余的逻辑有不同的实现。
  首先定义一个顶级框架,将细节交给子类去实现。
 
  访问者模式(Visitor)
  访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话接受这些操作的数据结构不需要改变。访问者模式适用于数据结构相对不稳定的系统,它把数据结构和作用于数据结构上的耦合解脱开。
  访问者模式使得新增加操作变得很容易,就是新增加访问者类。
  访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个节点类中。
  当适用访问者模式时,要将尽可能多的对象浏览逻辑放到访问者类中,而不是放到它的子类中。
  访问者模式可以跨过几个类的等级结构访问属于不同等级结构成员类。
分享到:
评论

相关推荐

    C++ 设计新思维:范型编程与设计模式之应用(中文PDF)

    并且通过运用这些模板技术(例如元编程等),实现了多个设计模式的代码框架的自动生成,书不厚,正文内容不过300页,但是书中没有废话,每一章的内容都很精彩,值得仔细推敲和研究,虽然里面有少量错误(有些可能是...

    设计模式java源码

    设计模式本身有很多种理解,可以使用接口也可以使用抽象类,关键是类作为传递参数, 理理思路,所以就写了23个模式的JAVA实例,假如以后有时间就写一些多个设计模式的组合实例, MVC\IOC\DAO\AOP运用那些模式,他们...

    五年级语文上册 第三单元 9 推敲教案设计 苏教版-苏教版小学五年级上册语文教案.docx

    文章条理清晰,通过贾岛对诗句“推”和“敲”的反复琢磨,揭示了文学创作中的推敲精神。 2. 学情分析:五年级学生对于历史故事通常抱有浓厚兴趣,此年龄段的孩子具备一定的阅读理解能力。通过《推敲》的故事,他们...

    UI设计教程-界面图标创意设计[整理].pdf

    在这个阶段,需要把我们的创意绘制出来,检验下视觉关系,也就是在视觉方面多在草图上推敲,这样效率高些,避免在渲染完后来后悔。首先要确定我们图标透视,这是关系到一套方案中的每个图标的透视方向,这是在图标...

    推敲的典故是怎样的-参考.doc

    【推敲】这一典故源于唐朝诗人贾岛的故事。他在创作诗歌时,对于“鸟宿池边树,僧推月下门”这句诗中的“推”字与“敲”字犹豫不决,陷入深思。恰巧在此时,他无意间闯入了大文学家韩愈的队伍。韩愈听闻此事,不仅...

    五年级语文上册 9推敲教案 苏教版-苏教版小学五年级上册语文教案.doc

    《推敲》这篇课文是苏教版小学五年级上册语文教材中的一篇课文,讲述了唐代著名诗人贾岛为了斟酌诗句中...通过贾岛的故事,孩子们可以明白,即使是简单的文字选择,也需要反复琢磨,不断推敲,才能达到最佳的艺术效果。

    四年级语文上册 第三单元 13《推敲》精品教案 冀教版-冀教版小学四年级上册语文教案.doc

    《推敲》这篇课文是小学四年级语文上册第三单元的内容,主要讲述了唐朝诗人贾岛在创作诗歌时,对于诗句中的一个字眼“推”与“敲”进行反复琢磨的故事,展现出他对文学创作的严谨态度和刻苦钻研精神。这篇课文的教学...

    9推敲.ppt

    从此,“推敲”一词便成为了形容对文字反复琢磨、力求精确的代名词。 贾岛的个性从这个故事中可见一斑,他是一个严谨且对诗词艺术有着执着追求的诗人。他的名言“两句三年得,一吟双泪流”充分展现了他对诗歌创作的...

    五年级语文上册 3.9 推敲教案2 苏教版-苏教版小学五年级上册语文教案.doc

    【推敲】这篇课文主要讲述了唐朝著名诗人贾岛在创作诗歌时,对于“推”与“敲”两个字反复琢磨,力求诗句更加精准的故事。这个故事发生在小学五年级语文上册的教学内容中,旨在帮助学生理解成语“推敲”的含义,同时...

    SJ-20131-92军用电子设备热设计指南.pdf

    在理解上述知识点时,应仔细推敲文档上下文含义,并尽可能排除识别错误的影响,确保理解的内容准确无误。 以上所述的知识点,是根据给定的文件标题、描述和标签,以及OCR扫描出的部分内容,对《SJ-20131-92军用电子...

    《推敲》课件.ppt

    贾岛的这种精神在今天的IT行业中同样值得借鉴,无论是编程代码的优化,还是产品设计的精细化,都需要我们具备“推敲”的精神,不断探索和改进,以创造出更优秀的作品。同时,韩愈的包容和欣赏也是我们在团队合作中...

    五年级语文上册 3.9 推敲教案1 苏教版-苏教版小学五年级上册语文教案.doc

    教学设计中,教师首先通过游戏引入课题,激发学生对文字推敲的兴趣,然后通过讲解新词,帮助学生理解课文内容。通过指导学生朗读,让他们更好地感知故事情节,理解贾岛的认真态度。同时,利用插图帮助学生感受诗歌的...

    UML和模式应用.pdf

    《UML和模式应用.pdf》是一份电子书资源,其内容涵盖UML(统一建模语言)以及设计模式在软件开发中的应用。UML是一种用于软件系统分析和设计的语言,它允许开发者使用图表来表示系统中的各种组件和它们之间的关系。...

    五年级语文上册 第三单元 9 推敲教案 苏教版-苏教版小学五年级上册语文教案.doc

    【推敲】这篇课文主要讲述了唐朝著名诗人贾岛在创作诗歌时,对于“推”与“敲”两个字反复琢磨,最终确定“敲”的故事,展现了他严谨的创作态度和不懈追求的精神。这个故事来源于贾岛的一首诗《题李凝幽居》,诗中的...

    五年级语文 《推敲》教案 北师大版.doc

    《推敲》这篇课文讲述了唐朝诗人贾岛的故事,他在创作诗歌时对字句进行严谨推敲的经历,尤其是他对“推”与“敲”两个字反复琢磨,体现出诗人对诗歌创作的认真态度和不懈追求。 教学目标包括: 1. 学生能够流利阅读...

    苏教五年级上册推敲PPT学习教案.pptx

    这篇文档是针对小学五年级学生设计的一份语文教学材料,主要讲解了唐代诗人贾岛的故事以及他对诗词精益求精的“推敲”精神。这份PPT学习教案涵盖了文学、语言艺术和历史等多个方面,旨在帮助学生理解古诗创作的过程...

    学年五年级语文上册 第三单元 9 推敲教案2 苏教版-苏教版小学五年级上册语文教案.doc

    1. 课程设计:本篇文档是针对苏教版小学五年级上册语文课程的教案,涉及第三单元的第9课“推敲”,旨在帮助学生学习和理解成语“推敲”的由来和含义。 2. 教学目标:教学目标包括学会8个生字,理解并运用相关词汇,...

    五年级语文推敲PPT学习教案.pptx

    这里“推敲”的典故便源于此,贾岛在“推”和“敲”之间反复琢磨,力求准确传达意境。 接着,教学过程中,教师会引导学生通过分析诗歌的意象,如“月光皎洁”、“鸟宿池边树”等,感受诗人的情感世界,体验诗人对...

    五年级语文上册 3.9 推敲教案3 苏教版-苏教版小学五年级上册语文教案.doc

    这篇文档是针对小学五年级语文课程的一份教案,主题为《推敲》,源自苏教版小学五年级上册语文教材。教案主要分为导入新课、初读感知、学习生字和布置作业四个部分,旨在帮助学生理解并学习古文中的“推敲”一词的...

    推敲的故事.doc

    贾岛在构思诗句“鸟宿池边树,僧敲月下门”时,对“推”和“敲”两个字反复琢磨,甚至在骑驴途中通过手势模拟动作来体会其意境,这种专注与执着体现了古代文人的敬业精神。当贾岛无意间闯入韩愈的仪仗队时,他的诚挚...

Global site tag (gtag.js) - Google Analytics