您好,欢迎访问三七文档
.NET设计模式开篇白林设计模式的起源《DesignPatterns:ElementsofReusableObject-OrientedSoftware》(《设计模式》),由ErichGamma、RichardHelm、RalphJohnson和JohnVlissides合著。这几位作者常被称为四人组(GangofFour),而这本书也就被称为四人组(或GoF)书。在《设计模式》这本书的最大部分是一个目录,该目录列举并描述了23种设计模式设计模式是规则吗?地上本没有路,走得人多了也就成了路。设计模式如同此理,它是经验的传承,并非体系;是被前人发现,经过总结形成了一套某一类问题的一般性解决方案,而不是被设计出来的定性规则;它不像算法那样可以照搬照用。设计模式是架构吗?架构和模式应该是一个属于相互涵盖的过程。模式的目标是,把共同问题中的不变部分和变化部分分离出来。不变的部分,就构成了模式,因此,模式是一个经验提取的“准则”,并且在一次一次的实践中得到验证,在不同的层次有不同的模式,小到语言实现,大到架构。在不同的层面上,模式提供不同层面的指导。需要设计模式吗?答案是肯定的,但你需要确定的是模式的应用是否过度?世界上有很多天才的程序员,他可以在一段代码中包含6种设计模式,也可以不用模式而把设计做得很好。但我们的目标是追求有效的设计,而设计模式可以为这个目标提供某种参考模型、设计方法。模式的格式描述模式的格式大致分为以下四个主要部分:模式名称(PatternName):每一个模式都有自己的名字,模式的名字使得我们可以讨论我们的设计。问题(Problem):在面向对象的系统设计过程中反复出现的特定场合,它导致我们采用某个模式。解决方案(Solution):上述问题的解决方案,其内容给出了设计的各个组成部分,它们之间的关系、职责划分和协作方式。效果(Consequence):采用该模式对软件系统其他部分的影响,比如对系统的扩充性、可移植性的影响。影响也包括负面的影响。模式的分类1.创建型模式2.结构型模式3.行为模式单例模式(Singleton)动机(Motivation)Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。意图(Intent)保证一个类仅有一个实例,并提供一个访问它的全局访问点。--《设计模式》GOF结构图(Structure)代码演示(Codein.Net)实现关键词:静态方法,静态字段,类的默认公有构造器。实现要点Singleton模式是限制而不是改进类的创建。Singleton模式一般不要支持Icloneable接口,因为这可能导致多个对象实例,与Singleton模式的初衷违背。Singleton模式一般不要支持序列化,这也有可能导致多个对象实例,这也与Singleton模式的初衷违背。理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的构造器的任意调用”。建造者模式(Builder)动机(Motivation)在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式意图(Intent)将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示--《设计模式》GOF结构图(Structure)代码演示(Codein.Net)实现要点建造者模式主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。我们说过的抽象工厂模式(AbtractFactory)解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化,建造者模式常和组合模式(CompositePattern)结合使用。效果1、建造者模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。2、每一个Builder都相对独立,而与其它的Builder无关。3、可使对构造过程更加精细控制。4、将构建代码和表示代码分开。5、建造者模式的缺点在于难于应付“分步骤构建算法”的需求变动。创建型模式总结概述创建型模式,就是用来创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象为什么需要创建型模式所有的创建型模式都有两个永恒的主旋律:第一,它们都将系统使用哪些具体类的信息封装起来;第二,它们隐藏了这些类的实例是如何被创建和组织的。外界对于这些对象只知道它们共同的接口,而不清楚其具体的实现细节。正因如此,创建型模式在创建什么(what),由谁(who)来创建,以及何时(when)创建这些方面,都为软件设计者提供了尽可能大的灵活性。单件模式(SingletonPattern)解决的是实体对象的个数问题,其他的都是解决new所带来的耦合关系问题。工厂方法模式(FactoryPattern)在工厂方法中,工厂类成为了抽象类,其实际的创建工作将由其具体子类来完成。工厂方法的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中去,强调的是“单个对象”的变化。抽象工厂模式(AbstractFactory)抽象工厂是所有工厂模式中最为抽象和最具有一般性的一种形态。抽象工厂可以向客户提供一个接口,使得客户可以在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象,强调的是“系列对象”的变化。生成器模式(BuilderPattern)把构造对象实例的逻辑移到了类的外部,在这个类的外部定义了这个类的构造逻辑。他把一个复杂对象的构造过程从对象的表示中分离出来。其直接效果是将一个复杂的对象简化为一个比较简单的目标对象。他强调的是产品的构造过程。原型模式(PrototypePattern)和工厂模式一样,同样对客户隐藏了对象创建工作,但是,与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。常见的五种创建型模式
本文标题:创建型
链接地址:https://www.777doc.com/doc-3535152 .html