设计模式-创建型
2023-09-07 22:18:11 7 举报
设计模式-创建型
作者其他创作
大纲/内容
ICloneable 接口
+Clone(): Object
UTF8Encoding
共享状态
Observer观察者模式
AbstractProductA
创建组合
工厂方法模式使用面向对象编程的多态性来将对象的创建延迟到具体工厂中,解决简单工厂存在的问题,符合开闭原则(对扩展开放,对修改关闭)。抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 CreateProduct() 来创建产品。具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
ProductB2
共享终结符
增加操作
Client:prototype.Clone();
Facade外观模式
Director 指挥者
- builder : Builder
+ Construct()
深拷贝是对对象实例中字段引用的对象也进行拷贝,如果一个对象有一个指向字符串的字段,并且我们对该对象进行了深拷贝的话,那么我们将创建一个对象和一个新的字符串,新的对象将引用新的字符串。也就是说,执行深拷贝创建的新对象和原来对象不会共享任何东西,改变一个对象对另外一个对象没有任何影响,而执行浅拷贝创建的新对象与原来对象共享成员,改变一个对象,另外一个对象的成员也会改变。
ConcretePrototype2
+Clone() : Object
给对象增加职责
Strategy策略模式
Adapter适配器模式
Client 访问类
-pm : PrototypeManager-obj : Object
+GetObject(key : string) : void
定义语法
ConcretePrototype1
ConcreteBuilder1
+BuildPartA() : void+BuildPartB() : void +BuildPartC() : void+GetResult() : Product
ConcreteBuilder
+ BuildPart()+GetResult() : Product
引用类型
枚举子女
Composite组合模式
值类型
ConcreteFactory1
+ CreateProductA() : AbstractProductA+ CreateProductB() : AbstractProductB
Product 产品
-PartA : string-PartB : string-PartC : string
+SetPartA(partA: string) :void+SetPartB(partB: string) :void+SetPartC(partC: string) :void
ICloneable 克隆接口
Visitor访问者模式
SqlDataAdapter
instance
ProductA2
抽象产品角色
共享组合
Factory Method工厂方法模式
共享策略
ProductA1
浅拷贝是指当对象的字段值被拷贝时,字段引用的对象不会被拷贝。例如,如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个浅拷贝,那么这两个对象将引用同一个字符串。
Bridge桥接模式
obj2
PageHandlerFactory
+GetHandler() : IHttpHandler
- instance : Multition
对复杂依赖关系的管理
Decorator装饰模式
AbstractProductB
ConcreteBuilder2
Prototype原型模式
Proxy代理模式
避免滞后
Memonto备忘录模式
State状态模式
具体产品角色
Abstract Factory抽象工厂模式
Prototype 抽象类
Director.Construct(){ builder.BuildPartA(); builder.BuildPartB(); builder.BuildPartC(); return builder.GetResult();}
ConcreteFactory2
ConcreteProductA
+Show() : void
设计模式之间的关系
Factory 抽象工厂类
+ CreateProduct() : Product
<<interface>>Product
Client
-prototype: Object
+Operation(): void
抽象工厂模式
原型模式用原型实例对象来指明所要创建的对象类型,并通过复制这个原型对象创建新的同类型对象。.Net中很多类都实现了ICloneable接口的Clone()方法来实现原型模式,各种数据结构,比如 Array等。原型(Prototype):声明一个克隆自身的接口,该角色一般有抽象类(Prototype)、接口(ICloneable)两种实现方式(GOF使用的是抽象类,在C#中个人推荐使用接口)。具体原型类(ConcretePrototype):实现原型(抽象类或接口)的 Clone() 方法,它是可被复制的对象。访问类(Client):使用具体原型类中的 Clone() 方法来复制新的对象。
单个实例
Command命令模式
SqlConnection
SimpleHandlerFactory
+Show() :void
简单工厂模式将对象的创建和对象本身业务处理分离,可以降低系统的耦合度,使得两者修改起来都相对容易。Factory:工厂角色。专门用于创建实例类的工厂,提供一个方法,该方法根据传递的参数不同返回不同类的具体实例。Product:抽象产品角色。为所有产品的父类。ConcreteProduct:具体的产品角色。
.NET类库中应用抽象工厂模式的类是System.Data.Common.DbProviderFactory,该类提供创建数据库连接时所需要的对象集合的接口,实际创建的工作在其子类工厂中进行。
Singleton
- instance : Singleton
- Singleton()+ GetInstance() : Singleton
UTF7Encoding
SimpleFactory
+ Create(param : string) : Product
工厂方法模式
建造者模式
定义算法步骤
obj1
IHttpHandlerFactory
Builder建造者模式
Page
动态地配置工厂
克隆和收藏的同学,请帮忙点个赞哈,感谢!
user.ashx
ConcreteProductB
ASCIIEncoding
Asp.net中,处理程序对象是具体用来处理请求,当我们请求一个*.aspx的文件时,此时会映射到System.Web.UI.PageHandlerFactory类上进行处理,而对*.ashx的请求将映射到System.Web.UI.SimpleHandlerFactory类中(两个类都是继承于IHttpHandlerFactory接口),关于这点说明我们可以在“C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\Config\\Web.Config”文件中找到相关定义。<httpHandlers><add path=\"*.axd\" verb=\"*\" type=\"System.Web.HttpNotFoundHandler\" validate=\"True\" /> <add path=\"*.aspx\" verb=\"*\" type=\"System.Web.UI.PageHandlerFactory\" validate=\"True\" /> <add path=\"*.ashx\" verb=\"*\" type=\"System.Web.UI.SimpleHandlerFactory\" validate=\"True\" /></httpHandlers>
for all objects in structure{ builder -> BuildPart()}
Encoding 是抽象类,又是简单工厂类。使用 GetEncoding(int codepage) 来创建不同的Encoding
定义链
使用组合命令
StringBuilder
+Append()+AppendLine()+ToString(): string
index.aspx
ConcreteFactoryB
改变外表改变内容
UTF32Encoding
多例模式,按实例数目可分为以下两种:1. 有上限多例模式:多例类的实例数目有上限,并把实例的上限当做逻辑的一部分创造到了多例类的内部,这种多例模式叫做有上限多例模式。 2. 无上限多例模式:多例类的实例数目并不需要有上限,实例数目并没有上限的多例模式就叫做无上限多例模式。
ConcreteFactoryA
Flyweight享元模式
原型模式可扩展为带原型管理器的原型模式,它在原型模式的基础上增加了一个原型管理器 PrototypeManager 类。该类用 Dictionary(或HashMap) 保存多个复制的原型,Client 类可以通过管理器的 Get(String id) 方法从中获取复制的原型。
Product 抽象产品
-builder: Builder
+Director()+Construct() : Product
Builder 建造者
DbProviderFactory
+CreateCommand(): DbCommand +CreateConnection(): DbConnection +CreateDataAdapter(): DbDataAdapter
Multition
- list : List<Multition>- n : int
- Multition(n : int)+ GetInstance() : Multition+ GetInstancen : int) : Multition
用工厂方法实现
单例模式保证一个类只有一个实例且能够自我实例化,并提供一个全局访问点。按实现方式分为 懒汉式单例、饿汉式单例。懒汉式单例: 类加载时没有生成单例,只有当第一次调用 Getlnstance 方法时才去创建这个单例。(需要注意线程安全问题)饿汉式单例: 类一旦加载就创建一个单例,保证在调用 GetInstance 方法之前单例已经存在。(是线程安全的)
Mediator中介者模式
经常使用
ProductB1
抽象工厂模式提供一个创建产品簇的接口来负责创建相关或依赖的对象,而不具体明确指定具体的类。对于新系列产品方便扩展,但产品增加新种类时,全部相关工厂都需要改,违背开闭原则。抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法CreateProduct(),可以创建多个不同等级的产品。具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。
IHttpHandler
设计模式之设计原则1,单一职责原则一个类应该只有一个引起它变化的原因,如果一个类承担的职责过多,这些职责就耦合在一起,一个职责的变化可能会影响到其他职责,另外,把多个职责耦合在一起,也会影响复用性。2,开闭原则一个软件实体(类、函数、模块等)应该对扩展开放,对修改关闭。即每次发生变化时,要通过添加新的代码来增强现在有类型的行为,而不是修改原有代码,符合开闭原则的最好方法是提供接口或抽象,然后让可能变化的类实现该接口或继承该抽象,让固定的接口或抽象与相关对象进行交互。3,里氏替换原则任何使用父类的地方,都可以用子类来代替,当子类替换掉父类后,程序的功能不受影响,父类才能真正被复用,而子类也可以在父类的基础上添加新的功能。里氏替换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而父类与子类的继承关系就是抽象化的具体实现,所以里氏替换原则是对实现抽象化的具体步骤的规范。4,依赖倒置原则依赖倒置原则是指要依赖于抽象,不要依赖于细节,降低软件实体(类、函数、模块等)与具体实现的耦合。开闭原则是面向对象设计的目标,而依赖倒置则是面向对象设计的主要手段。5,接口隔离原则使用多个单一职责的接口比使用一个职责臃肿的接口要好,不要让一个接口有过多职责,要把每个职责分成多个接口进行隔离。6,合成复用原则在一个新对象里使用一些已有对象,使之成为新对象的一部分,达到复用已有对象的功能的目的。尽量使用组合/聚合关系,少用继承。7,迪米特法则一个软件实体(类、函数、模块等)应当尽可能少的与其他实体之间发生相互作用,使系统功能模块相对独立。当一个模块修改时,就会尽量少的影响其他模块,扩展起来更容易。外观模式和中介者模式都使用了迪米特法则。
Encoding
+ GetEncoding(codepage : int) : Encoding
DbDataAdapter
font color=\"#ff3333\
Interpreter解释器模式
PrototypeManager 原型管理器
建造者模式将一个复杂对象的构建和它的表示分离,使同样的构建过程可能创建不同的表示。本质是使组装过程(用指挥者类进行封装,达到解耦的目的)和创建具体产品解耦,不用关心每个组件如何组装。产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个零部件。抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法GetResult()。具体建造者(Concrete Builder):实现Builder接口,完成复杂产品的各个部件的具体创建方法。指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。
具体工厂角色
AbstractFactory
多例模式
SqlClientFactory
Chain of Responsibility职责链模式
Template Method模板方法模式
单例模式
Singleton单例模式
UnicodeEncoding
保存迭代状态
简单工厂模式
DbCommand
Builder 抽象建造者
-product: Product
+BuildPartA()+BuildPartB() +BuildPartC()+GetResult() : Product
Get(){ ICloneable obj=dic[key]; return (Object)obj.Clone();}
Iterator迭代器模式
DbConnection
在.NET 类库中,System.Text.StringBuilder 就是一个建造者模式的实现,它扮演着指挥者和抽象建造者的角色。ToString()方法返回具体的奖品,Append()/AppendLine() 是创建产品的组件,也充当了指挥者角色,因为string 对象中每个组件都是字符,所以不需要指挥者角色。
定义遍历
原型模式
SqlCommand
抽象工厂角色
0 条评论
下一页