---------创建型。主要关注怎样创建对象?主要特点是将对象的创建与使用分离,这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成,
就像我们去商场购买商品时,不需要知道商品是怎么样生产出来一样,因为他们由专门的厂商生产。-------
单例模式:【5种方式】
在应用场景中,某些只要求生成一个对象的时候,如一个班中的班长、每个人的身份证号等。
当对象需要被共享的场合。由于单例模式只允许创建一个对象,共享该对象可以节省内存,并加快对象访问速度。如web中的配置对象、数据库的连接池。
原型模式:【克隆】
对象之间相同或相似,即只是个别的几个属性不同的时候。
对象的创建过程比较麻烦,但复制比较简单的时候。
工厂方法(类创建型):【jdbc】
客户只知道创建产品的工厂名,而不知道具体的产品名。如TCL电视工厂、海信电视工厂等。
创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
客户不关心创建产品的细节,只关心产品的品牌。
抽象工厂模式:【多数据库连接池】
当需要创建的对象是一系列相互关联或者相互依赖的产品时,如电器工厂中的电视机、洗衣机、空调等。
系统中有多个产品族,但每个只使用其中的某一族产品,如有人只喜欢穿一个品牌的衣服和鞋。
系统提供了产品的类库,且所有产品的接口相同,客户端不依赖产品实例的创建细节和内部结构。
建造者模式:【页面定制的加载】
同样的建造过程可以创建不同的表示。将一个复杂的对象分解为多个简单的对象。然后按内置的一步步构建而成。
它将变与不变分离,即产品的组成部分是不变的,每一部分可以灵活。
---------结构型。减少类数量,如何将类或对象按某种布局组成更大的结构。它分为类结构型和对象结构型。前者采用继承机制组织接口和类,后者采用组合或者聚合来组合对象------------
代理模式:【WCF技术或者webservice】
远程代理,这种方式通常是为了隐藏目标对象存在于不同地址空间的事实,方便客户端访问。例如,用户申请某些网盘空间时,会在用户的文件系统中建立虚拟的硬盘,用户访问虚拟硬盘时实际访问的是网盘空间。
虚拟代理,这种方式通常用于要创建的目标对象开销很大时。例如,下载一幅很大的图像需要很长时间,因某种计算比较复杂而短时间无法完成,这时可以先
用小比例的虚拟代理替换真实的对象,消除用户对服务器慢的感觉。
安全代理,这种方式通常用于控制不同种类客户对真实对象的访问权限。
智能指引,主要用于调用目标对象时,代理附加一些额外的处理功能。例如,增加计算真实对象的引用次数的功能,这样当该对象没有被引用时,就可以自动保存。
延迟加载,指为提高系统的性能,延迟对目标的加载。例如,H中存在属性的延迟加载和关联表的延时加载。
适配器模式:【统一调用入口】
在原来的类之上包装一层实现隔离(类适配:继承。对象适配:属性)
以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。(旧的和新的不一致)
使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。(扩展参数或者减少参数)(新的和旧的不一致)
桥接模式:【灵活性减少类的数量】
当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。(维度扩展)
当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。(减少类数量)
当一个系统需要在构件的抽象化角色和具体角色之间增加更多的灵活性时。(更多灵活性)
装饰模式:【动态装饰与撤销】
当需要给一个现有类添加附件职责,而又不能采用生成子类的方法进行扩充时。例如,该类被隐藏或者该类是终极类或者采用继承方式会产生大量的子类。
当需要通过对现有的一组基本功能进行排列组合而产生非常多的功能时,采用继承关系很难实现,而采用装饰模式却很好实现。
当对象的功能需求可以动态地添加,也可以在动态地撤销时。
外观模式:【在实现的基础上从大体外观的角度在抽象一个类】
组合模式:【tree结构结构化(自己套自己)描述】
享元模式:【map中获取数据库链接对象的获取】
主要用于减少创建对象的数量,以减少内存占用和提高性能,这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
------行为型。用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务。它涉及算法与对象间职责的分配----------
状态模式:【有个类做状态记录与切换】
当一个对象行为取决于他的状态,并且他必须在运行时根据状态改变它的行为时,就可以考虑使用状态模式。
一个操作中含有庞大的分支结构,并且这些分支决定于对象的状态时。
责任链模式:【将消息链式的发出去,运行时决定谁接收】
解释器模式:【仅编译器和运算表达式计算】
迭代器模式:【不同的方式来遍历整个集合对象,增加新的聚合类和迭代器类都很方便,无须修改原有代码】
中介者模式:【都借助第三者执行动作】
观察者模式:【设置属性时通知观察者族】
模板方法模式:【在抽象类中实现即模板,其他步骤在子类实现】
访问者模式:【分离数据结构与数据的操作,在访问类加一个对外提供接待访问者的接口】
策略模式:【包装各个算法,对象上转型调用接口方法】
备忘录模式:【有个类做记录】
需要保存与恢复数据的场景,如玩游戏时的中间结果的存档功能。
需要提供一个可回滚操作的场景,如word、记事本、photoshop,eclipse等软件在编辑时按撤销组合建,还有数据库中事务的操作。
命令模式:【中间有服务员类】
当系统需要将请求调用者与请求接受者解耦时,使得调用者和接收者不直接交互。
当系统需要随机请求命令或经常增加或删除命令时,命令模式比较方便实现这些功能。
当系统需要执行一组操作时,命令模式可以定义宏命令来实现该功能。
当系统需要支持命令的撤销操作和恢复操作时,可以将命令对象存储起来,采用备忘录模式来实现。
-------以上记录了23种设计模式。博主QQ:1198314565