设计模式
小山沟里的程序猿
向一个城墙发起冲锋!
展开
-
编程思想
1、什么是好的代码https://blog.csdn.net/Taobaojishu/article/details/998307472、如何提高代码质量https://blog.csdn.net/Taobaojishu/article/details/108413959原创 2021-01-23 11:57:55 · 363 阅读 · 0 评论 -
命令模式
一、简述命令模式(Command Pattern),将一个请求封装为一个对象或者操作封装到一个对象中,从而使用户可用不同的请求把客户参数化;对请求排队或记录请求日志,以及支持可撤销的操作。UML图中Client:客户端,也就是发出命令者 Invoker:执行者,该类的职责就是调用命令对象执行具体的请求,相关的方法我们称为行动方法 Command:命令,定义所有具体命令类的抽象接...原创 2019-07-14 22:09:35 · 215 阅读 · 0 评论 -
如何画数据库ER图
一、ER图基本概念ER图分为实体、属性、关系三个核心部分。在ER图中,实体是长方形,属性是椭圆形,关系为菱形。1、实体(entity)即数据模型中的数据对象(即数据表),用长方体来表示,每个实体都有自己的实体成员(entity member)或者说实体对象(entity instance),例如学生实体里包括张三、李四等。实体还会细分为弱实体和复合实体,一个实体必须依赖于另一个实...转载 2020-02-16 20:23:06 · 208150 阅读 · 4 评论 -
最通俗易懂的UML类图详解及实例
一、示例请看以下这个类图,类之间的关系是我们需要关注的:车的类图结构为<<abstract>>,表示车是一个抽象类; 它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示; 小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示; 小汽车与发动机之间是组合关系,使用带实心箭头的实线表示; 学生与...原创 2020-02-16 11:38:13 · 21000 阅读 · 3 评论 -
解释器模式
一、简述解释器模式(Interpreter Pattern),实际应用中较少用到的行为模式。主要作用就是提供解释语言的语法或表达式的能力,从作用上来说,注定实际开发过程中会使用的少,毕竟很少有人需要构建一套自己的语法来解析吧!但是,这并不表示解释器模式我们可以忽略掉。二、实现解释器模式UML图Context:上下文环境,包含解释器之外的全局信息 Client:客户端,解析表达...原创 2019-07-12 17:09:37 · 258 阅读 · 0 评论 -
模板方法模式
一、简述面向对象的开发过程中,通常会抽象一个对象或者是一个通用的行为流程,而对于一个行为流程的抽象,只是确保了流程的执行顺序,其中的具体步骤的实现是无法知晓的,不同的场景可能就会有不同的实现。在android中典型的例子就是AsyncTask,当调用execute()方法后,AsyncTask会依次执行onPreExecute、doInBackground、onPostExecute(如果...原创 2019-07-16 22:14:46 · 216 阅读 · 0 评论 -
装饰者模式
一、简述装饰者模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),以透明动态的方式来动态扩展对象的功能,也是继承关系的一种代替方案。Component:抽象组件(可以是抽象类或者接口),被装饰的原始对象 ConcreteComponent:具体实现类,被装饰的具体对象 Decorator:抽象装饰者,职责就是为了装饰我们的组件对象,内部一定要...原创 2019-07-23 22:30:46 · 276 阅读 · 0 评论 -
中介者模式
一、简述中介者模式(Mediator Pattern),使用一个中介对象封装一系列的对象交互,让得各对象之间没有明显的交互,并且能够独立的改变对象之间的交互(可能说的有点绕T_T)。看看这张图,就能理解了。简单的说就是,中介者对象聚合了对象的交互,其他的对象都是通过中介者对象进行交互,没有直接的交互。这个可以想象一下租房,中介手里有房东的房子,你找中介租房,中介就是你和房东之间的那个中...原创 2019-07-18 15:35:48 · 280 阅读 · 0 评论 -
享元模式
一、简介享元模式,是对象池的一种实现,主要用于减少创建对象的数量,以减少内存占用和提高性能。定义:运用共享技术有效地支持大量细粒度的对象。意思就是采用对象共享的形式来实现大量对象的情况。有大量对象的情况,有可能导致内存溢出或者重复创建之前已经创建的相同对象。先举个简单的例子,android中的ViewHolder缓存view,为了优化性能存在一种写法,使用一个集合存储已经被实例化过的vie...原创 2019-07-25 19:39:28 · 221 阅读 · 0 评论 -
桥接模式
一、简介桥接模式其定义是将抽象部分与实现部分分离,是它们可以独立进行变化。根据名字和定义可以简单的理解这种结构,中间有一个起到桥梁作用的东西,这样被这座桥连接的两端就可以发生改变,却又不会相会影响。还有一点,桥接模式还可以用于树状类之间的解耦。Abstraction:抽象部分,该类保持一个实现的对象引用,抽象部分中的方法需要调用实现部分的对象来实现 RefinedAbstract...原创 2019-07-25 20:05:12 · 485 阅读 · 0 评论 -
外观模式
一、简介外观模式(Facade Patttern)封装系统的复杂结构,向外提供一个可以访问系统的接口,这个接口就是系统内外通信的统一出入口。这样使系统更易于维护和使用。在我们集成很多第三方SDK的时候就会发现,我们集成一次之后,想要升级SDK的版本的话,我们只需要替换jar或者修改依赖库的版本,当然你也可以一直使用最新的版本。当然,某些情况也会出现对外不一致,例如SDK重构,或者修改对外暴露的...原创 2019-07-25 23:30:57 · 208 阅读 · 0 评论 -
组合模式
一、简述组合模式(Composite Pattern),也称作部分整体模式(Part-Whole Pattern),将一组相似的对象看做一个对象处理,并根据一个树状结构来组合对象;对象都提供一个统一的方法去访问相应的对象来处理多个对象的同一性问题。组合模式属于结构设计模式之一,而其设计目的就是将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性...原创 2019-07-22 22:40:39 · 272 阅读 · 0 评论 -
责任链模式
一、简述责任链模式(Chain of Responsibility),行为型设计模式之一。什么是责任链呢?这个链的形式更像是数据结构中的单链表,链中的每个节点都有自己的职责,同时也持有下一个节点的引用,属于自己职责范围内的请求就自行处理,并完成请求的处理;而不属于的职责就传递给下一个节点。每个节点都是如此循环,直至请求被处理或者已经没有处理节点。这种设计模式是为了避免请求的发送者和接收者之...原创 2019-07-11 23:11:58 · 250 阅读 · 0 评论 -
代理模式
一、简述代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中的中介者对象也是代理模式的应用,其他的对象的交互都是交给了中介者对象处理的。而在生活中就更多类似代理模式的例子,例如:抢票插件等等。Subject:抽象主题类(也可以是接口),声明共同方法 R...原创 2019-07-07 21:57:30 · 228 阅读 · 0 评论 -
单例模式
定义单例模式确保一个类只有一个实例,自行实例化并向系统提供这个实例。使用场景比如在PHP一个进程中,访问数据库需要的是同一个资源,这些配置的加载是同一个,必须保证只有一个实例,这时候可以用单例实现,在初始化的时候连接数据库资源,再次请求数据库时,依然复用同一连接。代码实现class XXXProxy extends BaseProxy{ public function __co...原创 2019-04-08 22:47:20 · 282 阅读 · 0 评论 -
策略模式
一、简述在之前的工厂模式中,为了创建不同的产品使用了switch case(或if else)的形式实现代码,这样违背了开闭原则,即对扩展开放、对修改封闭,维护的成本会随着cese(或else)的增加而增加,而本文的策略模式能较好地解决这个问题。定义:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。策略模式让算法独立于它的使用者之外,可以自由修改。来看看UML图,图...原创 2019-07-08 20:38:20 · 211 阅读 · 0 评论 -
状态模式
一、简述状态模式属于行为模式,其定义就是:类的内部状态改变时,可以改变它的行为。Android系统在未root时,是无法卸载系统预装应用的;root成功,开启root权限之后,不仅可以卸载系统预装应用,还可以使用xposed,简直就是可以为所欲为啊!这就可以看出,Android系统在root的状态变更时,影响到了自身的某些行为,进而某些行为也相对应的发生了改变。从UML来看,结构似...原创 2019-07-10 21:26:08 · 220 阅读 · 0 评论 -
建造者模式
一、背景 当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config、VO、PO、Entity...),要创建的话可能就需要了解这个类的内部结构,还有这些东西是怎么组织装配等一大坨乱七八糟的东西,这个时候就会增加学习成本而且会很混乱,这个时候就想啊想一种什么法子来管理一下这个类中的数据呢,怎么在创建的时候让它按部就班的来,并且代码可读性很好别让我看花了眼啊,我要的...原创 2019-07-05 09:45:31 · 319 阅读 · 0 评论 -
适配器模式
一、简介适配器模式(Adapter Pattern),此模式的作用就是兼容原本接口不匹配的两个类,起到桥梁的作用。其实在Android中平常接触的就很多,ListView和GridView到RecyclerView都用到的Adapter就用到了适配器模式,无论给Adapter什么样的数据,最后到RecyclerView显示的都是View。二、类适配器模式类的适配器模式,采用继承...原创 2019-07-10 23:30:41 · 303 阅读 · 0 评论 -
设计模式六大原则
一、单一职责原则(Single Responsibility Principle,缩写SRP)单一职责原则,就一个类而言,应该只有一个引起它变化的原因。简单说,一个类应该是一组高度相关的函数、数据的封装;也就是高内聚。下面代码为 ImageLoader(图片加载)类的代码public class ImageLoader{ //图片缓存 LruCache<St...原创 2019-07-06 23:35:27 · 244 阅读 · 0 评论 -
观察者模式
一、简述观察者模式是使用频率非常高的模式了,它定义了对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖他的对象都会收到通知,并自动刷新。很明显,说到这里首先就想到了Android中的ListView或者RecyclerView,当数据变化之后,再调用Adapter的notifyDataSetChanged()方法,列表的UI也就刷新了。其实就是使用了观察者模式。Obs...原创 2019-07-15 21:54:12 · 202 阅读 · 0 评论 -
备忘录模式
一、简述备忘录模式是一种行为模式,在不破坏封闭的前提下,将对象当前的内部状态保存在对象之外,之后可以再次恢复到此状态。典型的例子就是游戏存档和读档的这个行为。Originator:发起者,负责创建一个备忘录,并且可以记录、恢复自身的内部状态。可以根据需要决定Memento保存自身的那些内部状态 Memento:备忘录,用于存储Originator的状态,防止Originator以外的...原创 2019-07-15 23:02:21 · 222 阅读 · 0 评论 -
迭代器模式
一、简介迭代器模式,行为设计模式之一。定义就是,提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部数据存储的实现。迭代器模式源于对数据集合的访问,将遍历的方法封装到数据集合中,或者不提供遍历方法由用户自己遍历。以上两种方式都有弊端封装在数据集合中,那数据集合似乎多了些功能,数据集合不仅要维护自身数据元素,还要对外提供遍历的接口方法,遍历状态下还不能对同一个数据...原创 2019-07-16 08:47:30 · 223 阅读 · 0 评论 -
原型模式
一、简述定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。简单地理解,其实就是当需要创建一个指定的对象时,我们刚好有一个这样的对象,但是又不能直接使用,我会clone一个一毛一样的新对象来使用;基本上这就是原型模式。关键字:Clone。这些场景可能派的上用场当new一个对象时,非常繁琐复杂时,可以使用原型模式来进行复制一个对象。即使需求的变更,这些对象需要作出调...原创 2019-07-07 08:50:14 · 270 阅读 · 0 评论 -
工厂模式
定义工厂设计模式定义了一组创建对象的接口,同时使调用方避免确定将要实例化的类名称的步骤。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。使用场景工厂模式属于创建型设计模式,在创建若干个对象集合时,每个对象都实现相同的基对象(可以理解为接口),但每个对象的表现或特征。解决问题对调用者屏蔽具体实现,只需要关心接口即可。可扩展,只需要...原创 2019-04-06 13:37:41 · 279 阅读 · 0 评论