`
liangVhong
  • 浏览: 3129 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

浅谈java几种简单的设计模式

阅读更多
设计模式:

    * singleton(单例模式):在JVM中一个类只允许有一个对象实例,所有调用该对象的都共享这一个对象,它体现了一个类的单一性。
          o 实现单例的要求:
                + 私有的构造方法。防止在其它类中直接用new关键字生成该类的实例对象。
                + 一个同步、静态的返回值是本类的实例的方法。其它类中必须通过这个方法得到这个类的实例,且在这个类中有一个本类的私有的对象,当这个对象值为null时,new一个本类的实例对象返回,如果不是为null,那就将本类中的本类的实例对象返回。这样就防止了产生多个该类的实例对象。
    * factory(简单工厂模式):工厂模式取代了new关键字,降低了各层次间的偶合度,它专门负责将大量有共同接口的类实例化,而且事先不需要知道每次要实例化哪一个类,它定义一个用于创建对象的接口,由子类决定实现哪一个类。
          o 它相当于一个生产工厂,专门生产出具有共同接口的类的实例,所有需要这一种类型的实例的对象都从这个工厂中获得实例对象,而不需要直接通过new关键字去产生实例对象。它起到了对一种类型的实例有效的统一管理。
    * abstractFactory(抽象工厂模式):工厂模式中的工厂模式,它提供一系列相关或相互依赖对象的接口,而无需指定它们具体的类,抽象工厂模式是一种比简单工厂模式更抽象的模式,但是,它们类的原理是相同的,只不过简单工厂模式返回的是普通类的对象实例,而抽象工厂模式工厂类返回的是一个工厂类的实例对象,再通过个工厂类的实例对象获得其它具体类的实例对象。
          o 抽象工厂模式在工厂类这一层又进行了具体化,它提出一个工厂类的共同的抽象类或接口做为最父类,由子工厂类实现对不同的对象生成不同的工厂类。
    * facade(外观或门面模式):将业务逻辑抽取成一个接口(这个接口可以看做是一个方法或类),调用方法不需要知道它的具体实现。为子系统提供了一个更高层次、更简单的接口,降低了子系统的复杂度和依赖度及偶合度,使得子系统更易于使用和管理。
          o 门面模式就是将门面类中的行为单独的抽取出做为一个对象,这个对象只是为了门面类中的这一个方法而做。也可以反过来说。在客户端调用其对象时必须是通过这个门面类当中的某个方法,这个方法再去调用这个单独的对象。
    * template(模板模式):类的行为模式。基于继承之上,在父类中定义操作中算法的骨架(或称为顶级逻辑),将一些步骤(或称为基本方法),可能存在不同变化的执行延迟到其子类中。
          o 简单来说模板模式就是将各子类中将共性抽取到父类中,并定义一个执行的流程框架,将主要的逻辑骨架封装在父类,对于各子类可能有不同体现状态的,在父类中抽取为单独的方法供子类去实现,从而体现出父类的共性,子类的特殊性。
          o 模板模式具有灵活的扩展性、代码复用性、减少重复代码等优点。
    * strategy(策略模式):对算法的包装‘把使用算法的责任和算法本身分隔开,基于多态之上,父类定义行为,子类具体实现算法,并且各子类可以相互替换。
          o 在一定的范围内你想以不同的形式表现,就比如你从数据库中查询得到的结果集,你可以将它封装成返回给客户端的是一个List,也可以是一个 Map,也可以是一个Bean对象,但是,你返回的最终东西还都只是查询出的数据。客户端可以根据不同的需要获取不同的返回类型。这就体现出了一个策略的方式。
    * composite(组合模式):将对象以树形结构组织起来,以达成"部分-整体"的层次结构,使得客户端对单个对象和组合对象的使用具有一致性,它能达到"牵一动百"的效果。
          o 它也是基于继承之上的,所有树形结构上的节点都是同一类型,但是,树上又分为支点与叶节点,支点可以装载其它的节点,而叶节点不能装载其它节点,叶节点处理自己的逻辑。因为所有的节点都同属于一种类型,这就体现出了它们是一个整体。这一种类型中又分为叶与支点,这就体现出了部分的特性。只要运行了最根节点,整个树形结构的所有节点都会被遍历完,每个支节点都会遍历自己所包含的子节点,这样又体现出了“牵一动百”的功效。
    * Observer(观察者模式):它定义于一种一对多的依赖关系,当一个被依赖的对象发生变化,它会通知所有依赖于它的对象并“自动更新”,这就是当被观察者发生变化时,所有的观察者都会发生变化。
          o 在被观察者中有一个装载观察者的容器,当被观察者发生变化时,它会通知这个容器中所有的观察者进行改变。这就达到了关联的作用。
    * command(命令模式):将来自客户端的请求传入一个对象,无需了解这个请求激活的动作或有关接受这个请求的处理细节。其实就是将一个对象中的每个特定功能的方法扩散,用一个专门的command类来单独调用,客户端通过command执行相对应的操作。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics