![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 86
xiaopangcame
这个作者很懒,什么都没留下…
展开
-
设计模式、重构、编程规范等的经典书籍书籍推荐
有关设计模式、重构、编程规范等的经典书籍很多,有很多你应该已经听说过、甚至看过。今天,我就结合我的经验,对这些书籍进行一个整理和点评。你可以据此来选择适合你的书籍,结合着专栏一块儿来学习,这样学习效果会更好。原创 2022-09-02 22:57:22 · 633 阅读 · 0 评论 -
Android的设计模式-装饰者模式
1.定义动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。2.介绍3.UML类图角色说明:4.实现就以装修房间为例子4.1 创建抽象组件这里是一个抽象房子类,定义一个装修的方法:4.2 创建具体组件现在有一间新房子,已经装上了电:4.3 创建抽象装饰角色要为房子装修,定义抽象的房间装饰类:4.4 创建具体装饰类我们要将房间装修成卧室和厨房,其具体实现是不同的:4.5 客户端测试:输出结果:5. 应用场景 需要扩展一个类的功能,或给一个原创 2022-07-01 11:05:04 · 429 阅读 · 0 评论 -
工厂方法模式
概念定义工厂方法(Factory Method)模式,又称多态工厂(Polymorphic Factory)模式或虚拟构造器(Virtual Constructor)模式。工厂方法模式通过定义工厂抽象父类(或接口)负责定义创建对象的公共接口,而工厂子类(或实现类)则负责生成具体的对象。工厂方法模式对简单工厂模式中的工厂类进一步抽象。核心工厂类不再负责产品的创建,而是演变为一个抽象工厂角色,仅负责定义具体工厂子类必须实现的接口。同时,针对不同的产品提供不同的工厂。即每个产品都有一个与之对应的工厂。这样原创 2021-11-21 20:50:17 · 104 阅读 · 0 评论 -
java设计模式-代理模式
17,代理模式17.1 代理模式的定义和特点代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。代理模式的主要优点有:代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性其主要缺点是:代理模式会造成系统设计中类的数量增加 在客户端和目标原创 2021-11-21 20:26:16 · 598 阅读 · 0 评论 -
java设计模式-命令模式
18,命令模式18.1 命令模式的定义和特点命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。命令模式的主要优点如下。通过引入中间件(抽象接口)降低系统的耦合度。 扩展性良好,增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,且满足“开闭原则”。 可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。原创 2021-11-21 19:27:26 · 165 阅读 · 0 评论 -
java设计模式-状态模式
1 状态模式的定义和特点状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。状态模式是一种对象行为型模式,其主要优点如下。结构清晰,状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。 将状态转换显示化,减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。 状态类职责明确,有利于程序的扩展。通过定义新的子类..原创 2021-11-21 18:39:08 · 682 阅读 · 0 评论 -
java设计模式-桥接模式
桥接模式定义桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使它们都可以独立地变化。更容易理解的表述是:实现系统可从多种维度分类,桥接模式将各维度抽象出来,各维度独立变化,之后可通过聚合,将各维度组合起来,减少了各维度间的耦合。例讲桥接模式不必要的继承导致类爆炸汽车可按品牌分(本例中只考虑BMT,BenZ,Land Rover),也可按手动档、自动档、手自一体来分。如果对于每一种车都实现一个具体类,则一共要实现3*3=9个类。使用继承方式的类图如下从上图可原创 2021-11-21 16:48:03 · 325 阅读 · 0 评论 -
责任链模式
责任链模式的定义与特点责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。标准的责任链模式,个人总结下来有如下几个特点:链上的每个对象都有机会处理请求 链上的每个对象都持有下一个要处理对象的引用 链上的某个对象无法处理当前请求,那么它会把相同的请求传给下一个对象用一张图表示以下使用了责任链模式之后的架构:也就是说,责任链模式满足了请求发送者与请求处理者之间的松耦合,抽象非核原创 2021-11-20 21:51:14 · 85 阅读 · 0 评论 -
Java 设计模式之适配器模式
一、了解适配器模式1.1 什么是适配器模式适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。适配器模式有两种:“对象”适配器和“类”适配器。这个模式可以通过创建适配器进行接口转换,让不兼容的接口变得兼容。这可以让客户从实现的接口解耦。如果在一段时间之后,我们想要改变接口,适配器可以将改变的部分封装起来,客户就不必为了应对不同的接口而每次跟着修改。1.2 适配器模式组成结构客户 (Client):客户类。 目标接口(Target):客户原创 2021-11-20 20:36:45 · 194 阅读 · 1 评论 -
Java 设计模式之策略模式
一、了解策略模式1.1 什么是策略模式策略模式 (Strategy Pattern) 是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。此模式让算法的变化独立于使用算法的客户。1.2 策略模式组成结构环境 (Context):持有一个策略类的引用,最终给客户端调用。 抽象策略 (Strategy): 策略类,通常是一个接口或者抽象类。 具体策略 (ConcreteStrategy):实现了策略类中的策略方法,封装相关的算法和行为。1.3 策略模式 UML 图解原创 2021-11-20 20:16:39 · 5269 阅读 · 2 评论 -
Java 设计模式之装饰者模式
一、了解装饰者模式1.1 什么是装饰者模式装饰者模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰者来包裹真实的对象。所以装饰者可以动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的方案。1.2 装饰者模式组成结构抽象构件 (Component):给出抽象接口或抽象类,以规范准备接收附加功能的对象。 具体构件 (ConcreteComponent):定义将要接收附加功能的类。 抽象装饰 (Decorator原创 2021-11-20 19:12:21 · 165 阅读 · 0 评论 -
中介者模式
模式的结构与实现中介者模式实现的关键是找出“中介者”,下面对它的结构和实现进行分析。1. 模式的结构中介者模式包含以下主要角色。抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。 具体中介者(Concrete Mediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。 抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法原创 2021-07-28 22:56:47 · 88 阅读 · 0 评论 -
状态设计模式
状态模式的结构与实现状态模式把受环境改变的对象行为包装在不同的状态对象里,其意图是让一个对象在其内部状态改变的时候,其行为也随之改变。现在我们来分析其基本结构和实现方法。1. 模式的结构状态模式包含以下主要角色。环境类(Context)角色:也称为上下文,它定义了客户端需要的接口,内部维护一个当前状态,并负责具体状态的切换。 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为。 具体状态(Concrete State)角色:实现抽象状原创 2021-07-28 22:33:41 · 344 阅读 · 0 评论 -
命令设计模式
命令模式的结构与实现可以将系统中的相关操作抽象成命令,使调用者与实现者相关分离,其结构如下。1. 模式的结构命令模式包含以下主要角色。抽象命令类(Command)角色:声明执行命令的接口,拥有执行命令的抽象方法 execute()。 具体命令类(Concrete Command)角色:是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。 实现者/接收者(Receiver)角色:执行命令功能的相关操作,是具体命令对象业务的真正实现者。 调用者/请求者原创 2021-07-28 22:17:55 · 421 阅读 · 0 评论 -
策略设计模式
策略模式的结构与实现策略模式是准备一组算法,并将这组算法封装到一系列的策略类里面,作为一个抽象策略类的子类。策略模式的重心不是如何实现算法,而是如何组织这些算法,从而让程序结构更加灵活,具有更好的维护性和扩展性,现在我们来分析其基本结构和实现方法。1. 模式的结构策略模式的主要角色如下。抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。 具体策略(Concrete Strategy)类:原创 2021-07-28 22:11:52 · 230 阅读 · 0 评论 -
模板方法模式
模式的结构与实现模板方法模式需要注意抽象类与具体子类之间的协作。它用到了虚函数的多态性技术以及“不用调用我,让我来调用你”的反向控制技术。现在来介绍它们的基本结构。1. 模式的结构模板方法模式包含以下主要角色。1)抽象类/抽象模板(Abstract Class)抽象模板类,负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。这些方法的定义如下。① 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。② 基本方法:是整个算法中的一个步骤,包含以下几种类型。抽原创 2021-07-28 21:57:14 · 78 阅读 · 0 评论 -
组合设计模式
组合模式的结构与实现组合模式的结构不是很复杂,下面对它的结构和实现进行分析。1. 模式的结构组合模式包含以下主要角色。抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。在透明式的组合模式中抽象构件还声明访问和管理子类的接口;在安全式的组合模式中不声明访问和管理子类的接口,管理工作由树枝构件完成。(总的抽象类或接口,定义一些通用的方法,比如新增、删除) 树叶构件(Leaf)角色:是组合中的叶节点对象,它没有子节点,用于继承或实现抽象构件原创 2021-07-28 21:51:04 · 103 阅读 · 0 评论 -
享元设计模式
享元模式的结构与实现享元模式的定义提出了两个要求,细粒度和共享对象。因为要求细粒度,所以不可避免地会使对象数量多且性质相近,此时我们就将这些对象的信息分为两个部分:内部状态和外部状态。内部状态指对象共享出来的信息,存储在享元信息内部,并且不回随环境的改变而改变; 外部状态指对象得以依赖的一个标记,随环境的改变而改变,不可共享。比如,连接池中的连接对象,保存在连接对象中的用户名、密码、连接URL等信息,在创建对象的时候就设置好了,不会随环境的改变而改变,这些为内部状态。而当每个连接要被回收利用时原创 2021-07-28 12:44:34 · 50 阅读 · 0 评论 -
装饰器模式
装饰器模式的结构与实现通常情况下,扩展一个类的功能会使用继承方式来实现。但继承具有静态特征,耦合度高,并且随着扩展功能的增多,子类会很膨胀。如果使用组合关系来创建一个包装对象(即装饰对象)来包裹真实对象,并在保持真实对象的类结构不变的前提下,为其提供额外的功能,这就是装饰器模式的目标。下面来分析其基本结构和实现方法。1. 模式的结构装饰器模式主要包含以下角色。抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。 具体构件(ConcreteComponent)角原创 2021-07-28 12:30:03 · 176 阅读 · 0 评论 -
适配器模式
模式的结构与实现类适配器模式可采用多重继承方式实现,如C++可定义一个适配器类来同时继承当前系统的业务接口和现有组件库中已经存在的组件接口;Java不支持多继承,但可以定义一个适配器类来实现当前系统的业务接口,同时又继承现有组件库中已经存在的组件。对象适配器模式可釆用将现有组件库中已经实现的组件引入适配器类中,该类同时实现当前系统的业务接口。现在来介绍它们的基本结构。1. 模式的结构适配器模式(Adapter)包含以下主要角色。目标(Target)接口:当前系统业务所期待的接口,它可...原创 2021-07-28 12:16:56 · 201 阅读 · 0 评论 -
代理设计模式
代理模式的结构与实现代理模式的结构比较简单,主要是通过定义一个继承抽象主题的代理来包含真实主题,从而实现对真实主题的访问,下面来分析其基本结构和实现方法。1. 模式的结构代理模式的主要角色如下。抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制原创 2021-07-28 12:08:29 · 55 阅读 · 0 评论