
设计模式
0xac001d09
https://leetcode-cn.com/u/jerry_nju/
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式(1):单例模式与多例模式
一、基础概念1、定义:保证一个类只有一个实例,并提供一个全局访问点2、类型:创建型3、适用场景想确保任何场景下都只有一个实例 ,比如线程池、数据库连接池全局信息类,比如网站访问次数,我们希望所有访问记录都记录在对象A上,这时候就要使得这个类是单例无状态工具类,比如日志工具类,不管在哪里使用,只需要它帮助我们记录日志信息这时候我们只需要一个实力对象就可以了4、优点:(1)在内存里...原创 2019-11-26 15:27:54 · 1985 阅读 · 0 评论 -
设计模式(2):策略模式
1、定义:把不同的算法封装到不同类里(这些类实现同一个接口),让它们之间可以相互替换,这样算法的变化不会影响到使用算法的用户。2、实际应用:大范围处理if…else,如果一个方法里有大量的if…else这类语句,可以通过它消除3、类型:行为型4、适用场景:系统中有很多类,而它们的区别仅仅是行为上的不同,适用策略模式,可以动态得在许多行为中选择一个行为。(不同的行为放到不同的类里边,有很...原创 2019-11-26 16:17:07 · 601 阅读 · 0 评论 -
设计模式(3):观察者模式
一、概念1、定义:一(主题对象)对多(观察者对象)中,主题对象发生变化时,及时通知观察者进行更新,观察者可以订阅/取消订阅主题对象观察者模式提供了一种对象设计,让主题和观察者之间低耦合,主题只知道观察者实现了Observer接口,主题不需要知道观察者的具体类是谁(因为所有观察者实现了相同的Obsever接口这是主题知道的,每个观察者都有一个update方法),做了什么,并且任何时候都能增删观察...原创 2019-11-26 16:24:28 · 518 阅读 · 0 评论 -
设计模式(4):装饰者模式
一、概念1、定义:装饰者模式动态地将“责任”附加到对象上。对于扩展功能,装饰者提供了比继承更有弹性的替代方案2、类型:结构型3、三个要素:主题(被装饰的)、装饰、委托4、适用情况星巴兹咖啡的例子,很多具体类来继承一个抽象类导致类爆炸5、UML装饰者和被装饰者必须是一样的类型,它们继承了共同的超类,这是关键,利用继承获得了类型匹配,而不是继承它的行为,行为是来自装饰者自身以及其他的基...原创 2019-11-26 16:29:17 · 425 阅读 · 0 评论 -
设计模式(5):工厂与抽象工厂模式
一、简单工厂定义:由一个工厂对象决定创建出哪一种产品类的实例类型:创建型,但不属于GOF23种设计模式适用场景:工厂类负责创建的对象较少,客户端/应用层,只知道传入工厂类的参数,对于如何创建对象不关系优点:只需要传入参数就可以获取所需要的对象而不需要知道其细节缺点:增加新的产品需要修改工厂类的逻辑,违背了ocp二、工厂方法简答工厂和工厂方法的区别是,简单工厂没使用抽象类或是接口,工厂...原创 2019-11-26 16:32:23 · 450 阅读 · 0 评论 -
设计模式(6):适配器模式
1、定义:适配器就是将一个类的接口转换成客户期望的另一个接口,让原本接口不兼容的类兼容2、类型;结构型3、例子让适配器实现你想转换成的类型接口,也就是客户期望看到的接口,适配器的全局变量为需要适配的那个对象,在适配器的构造方法中传入那个需要适配的对象,重写接口的方法,这个方法中要用到需要适配的对象。4、注意:一个适配器的工作是将一个接口转换成另一个,大多是都是让一个适配器包装一个...原创 2019-11-26 16:37:12 · 981 阅读 · 0 评论 -
设计模式(7):外观模式
一、概念1、定义:又叫门面模式,外观模式提供了一个统一的接口,用来访问子系统中一群接口的操作,这样使得子系统更容易使用,即使子系统发生变化,但只要外观不变,就不会影响到客户端代码。2、类型:结构型3、适用场景子系统越来越复杂,增加外观模式提供简单的接口构建多层系统结构,利用外观对象作为每层的入口,简化了层间调用4、优点简化调用过程,无需深入了解子系统,防止带来风险(某个功能集成...原创 2019-11-26 16:40:07 · 309 阅读 · 0 评论 -
设计模式(8):模版方法模式
一、概念1、定义:模版方法模式在一个方法中定义了一个算法的步骤(完成一件事的一个步骤),把这些步骤的实现推迟到了子类。即模版是一套固定的算法,但是可以通过子类扩展固定算法的某些步骤。2、类型:行为型3、适用场景:一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。比如往冰箱里放东西这个操作,打开门和关上门的操作是不变的,具体放什么可以改变。各子类中公共的行为被提取出来,放到一...原创 2019-11-26 16:41:36 · 356 阅读 · 0 评论 -
设计模式(9):组合模式
一、概念1、定义:将对象组合成树形结构以表示“整体-部分”的层次结构,组合模式使得客户端对单个对象和组合对象保持一致的方式处理。(菜单为例:菜单中有多个子菜单,子菜单还有子菜单。或者是目录这种情况)组合模式能够让我们用树型的方式创建对象的结构,树中包含了组合和个别的对象,我们可以把相同的操作应用在组合和个别上,忽略两者的差别。2、类型:结构型3、适用场景:希望客户端可以忽略组合对象与单个对象...原创 2019-11-26 16:43:29 · 419 阅读 · 0 评论 -
设计模式(10):状态模式
一、概念1、定义:允许一个对象在其内部状态改变时,改变它的行为。状态模式允许对象再内部状态改变时改变它的行为,对象看起来好像修改了它的类。前半句话是说,这个模式将状态封装成了独立的类,并且将动作委托到当前状态的对象。行为会随着内部状态的改变而改变,糖果机投入前后的内部状态是不一样的。后半句话是说,以应用层视角来看,你使用的对象能够完全改变它的行为,你会觉得这个对象可能是从别的类实例化而来的,但实...原创 2019-11-26 16:45:33 · 460 阅读 · 0 评论 -
设计模式(11):代理模式
一、概念1、定义:为一个对象提供替身或占位符以控制对这个对象的访问2、类型;结构型3、适用环境:远程代理:为不同地址空间的地址对象提供本地的代理对象虚拟代理:创建资源消耗较大的对象时,先创建一个消耗较小的对象来代替真实对象,而真实的对象只有被用到才创建Copy-On-Write代理:属于虚拟代理的一种,把克隆操作推迟到客户端真正需要时才执行4、优缺点优点协调调用者和被调用者...原创 2019-11-26 16:47:14 · 410 阅读 · 0 评论 -
设计模式(12):建造者模式
一、概念1、定义:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示;用户只需指定需要建造的类型就可以得到它们(相同的构建过程创建出不同的产品),不需要知道建造的过程以及细节。2、类型:创建型3、适用场景:如果一个对象有非常复杂的内部结构(很多属性);想把复杂对象的创建和使用分离4、优缺点优点:封装性好,创建和使用分离,将主要的业务逻辑封装在导演类中能够取得较...原创 2019-11-27 09:35:00 · 270 阅读 · 0 评论 -
设计模式(13):原型模式
一、概念1、定义:原型实例指定创建对象的种类,可以通过拷贝这些原型创建新的对象。(不需要知道任何创建的细节,且不调用构造函数)2、类型:创建型3、适用场景类初始化消耗较多资源时new一个对象的过程繁琐(需要数据准备、访问权限)或构造函数复杂循环体产生大量对象时4、优缺点优点:性能比直接new一个对象性能高,简化了创建过程缺点:必须配备克隆方法;克隆复杂对象,或...原创 2019-11-27 09:36:57 · 143 阅读 · 0 评论 -
设计模式(14):桥接模式
一、概念1、定义:将抽象部分和具体实现部分分离,使他们都可以独立的变化(即在一定程度上解耦)。桥接模式是通过组合的方式建立两个类之间的关系,而不是继承。抽象部分:需要经过抽象化 ,忽略一些信息,把不同的实体当作同样的实体对待,抽取类的共同性质形成类,这个过程就叫抽象化的过程。抽象一般指抽象类。具体实现部分:实现化,产生的对象比抽象部分产生的对象更为具体。具体的实现一般都是行为。2、类型...原创 2019-11-27 09:38:24 · 203 阅读 · 0 评论 -
设计模式(15):享元模式
一、概念1、定义:减少创建对象的数量,减少内存占用,从而改善应用所需的对象结构的方式(即改善性能)。运用了共享技术有效地支持大量细粒度的对象。(复用对象的思想)2、类型:结构型,英文名FlyWeight(最轻量级)。3、适用场景常常应用于系统底层的开发,以便解决系统性能问题。系统中对象较多时,会导致内存溢出,可以把共同的部分抽象出来。如果系统中有大量的相似对象,需要使用缓冲池的场景。例...原创 2019-11-27 09:40:08 · 166 阅读 · 0 评论 -
设计模式(16):命令模式
一、概念1、定义:将请求封装成对象,以便使用不同的请求。(即把不同的请求封装成不同的对象,对于接收者来说它能够识别,然后执行不同的行为)命令模式解决了程序中对象的职责以及它们之间的通信方式(使得发送者和接收者完全解耦,不需要清楚对方的细节)2、分类:行为型3、适用场景请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交互需要抽象出等待执行的行为4、优点:降低耦合容易扩展...原创 2019-12-02 20:14:39 · 437 阅读 · 0 评论