分类 "Design" 的存档.

描述

设计模式

浅谈观察者模式和代理模式

  今天聊天交流的时候,提及观察者模式和代理模式。一个同学是这么说的:观察者模式和代理模式实现出来的最终效果都一样,在代码层面上都是可以相互实现的。他可能是觉得不管用什么模式,最后业务层面实现的需求都是一样的。这就使我之后对这两种模式进行了深入的研究,细思他们的定义。
阅读更多…

设计模式(10):组合模式(Composite)

组合模式的定义

  将对象组合成树型结构以表示”部分幢整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
  组合模式的关键就在于这个抽象类,这个抽象类既可以代表叶子对象,也可以代表组合对象,这样用户在操作的时候,对单个对象和组合对象的使用就具有了一致性。
阅读更多…

设计模式(9):享元模式(Flyweight)

  享元模式(英语:FlyweightPattern)是一种软件设计模式。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。
   阅读更多…

设计模式(8):创建型模式小结

细细琢磨了5个创建型模式,下面再做一个总结:
简单工厂模式的本质是:选择实现。
单例模式的本质是:控制实例数目。
抽象工厂模式的本质是:选择产品簇的实现。
建造者模式的本质是:分离整体构建算法和部件构造。
工厂模式的本质是:延迟到子类来选择实现。
原型模式的本质是:克隆生成对象。 阅读更多…

设计模式(7):简单工厂模式(Simple Factory)

提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。

适用情景

以下情况中选用简单工厂。
• 如果想要完全封装隔离具体实现,让外部只能通过接口来操作封装体,那么可
以选用简单工厂,让客户端通过工厂来获取相应的接口,而无须关心具体的实
现。
• 如果想要把对外创建对象的职责集中管理和控制,可以选用简单工厂, -个简
单工厂可以创建很多的、不相关的对象,可以把对外创建对象的职责集中到一
个简单工厂来, 从而实现集中管理和控制。
阅读更多…

设计模式(6):原型模式(Prototype)

  其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。
  原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。
   阅读更多…

设计模式(5):建造者模式(Builder)

意图

  将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

建造者模式的优点:

• 松散辑合
  生成器模式可以用同一个构建算法构建出表现上完全不同的产品,实现产品构建和产品表现上的分离。生成器模式正是把产品构建的过程独立出来,使它和具体产品的表现松散稿合,从而使得构建算法可以复用,而具体产品表现也可以灵活地、方便地扩展和切换。
• 可以很容易地改变产品的内部表示
  在生成器模式中,由于Builder 对象只是提供接口给Director 使用,那么具体的部件创建和装配方式是被Builder 接口隐藏了的, Director 并不知道这些具体的实现细节。这样一来,要想改变产品的内部表示,只需要切换Builder 的具体实现即可,不用管Director,因此变得很容易。
• 更好的复用性
  生成器模式很好地实现了构建算法和具体产品实现的分离。这样一来,使得构建产品的算法可以复用。同样的道理,具体产品的实现也可以复用,同一个产品的实现,可以配合不同的构建算法使用。
阅读更多…

设计模式(4):抽象工厂模式(Abstract Factory)

  抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。
  “工厂”是创建产品(对象)的地方,其目的是将产品的创建与产品的使用分离。抽象工厂模式的目的,是将若干抽象产品的接口与不同主题产品的具体实现分离开。这样就能在增加新的具体工厂的时候,不用修改引用抽象工厂的客户端代码。
   阅读更多…

设计模式(3):工厂模式(Factory Method)

  定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使一个类的实例化延迟到其子类。
  创建一个对象常常需要复杂的过程,所以不适合包含在一个复合对象中。创建对象可能会导致大量的重复代码,可能会需要复合对象访问不到的信息,也可能提供不了足够级别的抽象,还可能并不是复合对象概念的一部分。工厂方法模式通过定义一个单独的创建对象的方法来解决这些问题。由子类实现这个方法来创建具体类型的对象。
  在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象。工厂是构造方法的抽象,用来实现不用的分配方案。
   阅读更多…

设计模式(2):单例模式(singleton)

  单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。
  实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。
   阅读更多…