设计模式
专注网赚的程序员
一只走过京东、美团、阿里等大厂的野生程序员,专注于写代码和网赚, 欢迎交流
展开
-
设计模式 - - - 从单例模式谈起
面试中和工作中经常能遇到单例模式的相关问题:在这里总结一下单例模式。1,什么是单例模式?单例模式就是在整个系统运行的过程中某一个类只有一个实例对象,实现这种方式的方法就称为单例模式。Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”2,为什么要有单例模式?单例模式的存在原因是一些实例如果在系统中存在多份实例的话,会引发问题,如产生序列号的实例,如果存在多份的话原创 2016-06-19 14:12:11 · 522 阅读 · 0 评论 -
设计模式(16)--迭代器模式
什么是迭代器模式? 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。什么时候使用? 1、访问一个聚合对象的内容而无须暴露它的内部表示。 2、需要为聚合对象提供多原创 2017-10-20 11:09:44 · 162 阅读 · 0 评论 -
设计模式(6)--原型模式
什么是原型模式? 原型模式是一种创建行为模式,和建造者相似,都是为创建对象而存在的设计模式。什么时候应用原型模式? 原型模式的设计初衷是为了高性能的拷贝对象,如果一个对象在初始化的过程中需要很多准备,很高的资源消耗的时候,第二次使用这个对象的时候还得再重复一遍,使用原型模式,可以直接对该对象进行克隆。高效。如何实现原型模式? 实现原型模式的关键是实现克隆操作,在 JAVA 继承 Cloneab原创 2017-10-11 16:35:37 · 196 阅读 · 0 评论 -
设计模式(17)--中介者模式
什么是中介者模式? 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。 意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 主要解决:对象与对象之间存在大量的关联关系原创 2017-10-23 15:23:53 · 151 阅读 · 0 评论 -
设计模式(18)--备忘录模式
什么是备忘录模式? 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。什么时候使用? 很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有”后悔药”可吃。1、后悔药。 2、打游戏时的存档。 3、Windows 里的 ctri + z。 4、IE 中的原创 2017-10-23 15:42:25 · 208 阅读 · 0 评论 -
设计模式(19)--空对象模式
什么是空对象模式? 在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。 在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的原创 2017-10-24 09:40:01 · 298 阅读 · 0 评论 -
设计模式(20)--观察者模式
什么是观察者模式? 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。什么时候使用观察者模式? 当一个对象的属性变化要通知其他类的时候,可以使用观察者模式实现。如何实现?public abstract class Observer { public SubJect subJect;原创 2017-10-24 16:39:44 · 164 阅读 · 0 评论 -
设计模式(7)--适配器模式
什么是适配器模式? 适配器模式是一种行为型模式,是作为两个不兼容的接口之间的桥梁。例如电源的适配器,接口的适配器等等。什么时候使用适配器? 适配器模式并不是一个经常使用的设计模式, 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 3、通过接口转换,原创 2017-10-16 09:30:48 · 213 阅读 · 0 评论 -
设计模式(21)--状态模式
什么是状态模式? 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。什么时候使用? 1、行为随状态改变而改变的场景。 2、条件、分支语句的代替者。如何实现?public interface State { public void原创 2017-10-25 09:17:41 · 188 阅读 · 0 评论 -
设计模式(22)--策略模式
什么是策略模式? 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。什么时候使用策略模式? 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动原创 2017-10-25 09:21:41 · 242 阅读 · 0 评论 -
设计模式(23)--模板模式
什么是模板模式? 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。什么时候使用模板模式? 1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。使用场景? 第一能想到的便是hibernate的模板类,我们扔给模板类的原创 2017-10-25 09:36:56 · 158 阅读 · 0 评论 -
设计模式(8)--桥接模式
什么是桥接模式? 桥接模式是一种结构型模式,用于把抽象和实现分离。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。为什么使用桥接模式? 种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。桥接模式的使用场景? 1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式原创 2017-10-16 10:22:57 · 170 阅读 · 0 评论 -
设计模式(9)--过滤器模式
什么是过滤器模式? 过滤器模式是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。所以也叫标准模式。什么时候用? 顾名思义,在我们要以不同的标准过滤一组对象或者请求的时候。如何实现? 伪代码:public interface 过滤器接口(){ List<Person> 过滤原创 2017-10-17 11:26:46 · 218 阅读 · 0 评论 -
设计模式(10)--组合模式
什么是组合模式? 组合模式是一种结构型模式,把多个对象组合为一个整体,类似于在公司中,每个人都是员工,但是员工有上下级的关系,整个级别组合一起为公司整体,组合模式是一种简单的设计模式:如何实现??public class Employee { private String name; private String dept; private int salary;原创 2017-10-17 11:45:01 · 151 阅读 · 0 评论 -
JDK中使用的设计模式
这也是篇老文了,相信很多人也看过。前面那些废话就不翻译了,直接切入正题吧~结构型模式:适配器模式: 用来把一个接口转化成另一个接口。 java.util.Arrays#asList() javax.swing.JTable(TableModel) java.io.InputStreamReader(InputStream) java.io.OutputStreamWriter...原创 2018-07-24 11:20:56 · 2036 阅读 · 0 评论 -
生成全局唯一ID
数据在分片时,典型的是分库分表,就有一个全局ID生成的问题。 单纯的生成全局ID并不是什么难题,但是生成的ID通常要满足分片的一些要求: 1 不能有单点故障。 2 以时间为序,或者ID里包含时间。这样一是可以少一个索引,二是冷热数据容易分离。 3 可以控制ShardingId。比如某一个用户的文章要放在同一个分片内,这样查询效率高,修改也容易。 4 不要太长,最好...原创 2018-07-25 09:59:45 · 208 阅读 · 0 评论 -
设计模式(15)--解释器模式
什么是解释器模式? 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。何时使用? 1、可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。 2、一些重复出现的问题可以用一种简单的语言来进行表达。 3、一个简单语法需要解释的场景。如原创 2017-10-20 10:52:41 · 176 阅读 · 0 评论 -
设计模式(5)--反向理解建造者模式
什么是建造者模式? 建造者模式是一种创建行为模式,为了是创建对象而存在的设计模式,当对象是由多个简单对象组合而成,且对象组合不断变化的时候,这个对象的创建可以考虑使用建造者模式。什么时候使用? 对象由多个简单对象组合而成,且对象的组合不断变化的时候。 例如汉堡、可乐可以看做成简单的对象,套餐是我们要创建的对象,套餐包含的对象的种类是不断变化的,套餐的创建就适合使用建造者模式。有什么缺点? 1原创 2017-10-11 11:08:01 · 224 阅读 · 0 评论 -
设计模式(32)--传输对象模式
什么是传输对象模式? 传输对象模式(Transfer Object Pattern)用于从客户端向服务器一次性传递带有多个属性的数据。传输对象也被称为数值对象。传输对象是一个具有 getter/setter 方法的简单的 POJO 类,它是可序列化的,所以它可以通过网络传输。它没有任何的行为。服务器端的业务类通常从数据库读取数据,然后填充 POJO,并把它发送到客户端或按值传递它。对于客户端,传输原创 2017-10-27 15:05:36 · 321 阅读 · 0 评论 -
java单例模式的七种写法
第一种(懒汉,线程不安全):public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instanc原创 2017-07-31 21:08:18 · 244 阅读 · 0 评论 -
设计模式(11)--装饰器模式
什么是装饰器模式? 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。什么时候用? 想扩展一个对象的功能,并不想因为重复扩展带来的子类膨胀问题。典型应用 java中的IO流如何实现?原创 2017-10-18 12:31:00 · 233 阅读 · 0 评论 -
设计模式(12)--外观模式
什么是外观模式? 隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。如何实现?public interface Shape{ void draw();}public class Circle implements Shape { public void draw() {原创 2017-10-18 12:48:32 · 177 阅读 · 0 评论 -
设计模式(3)--代理模式
代理模式在工作中用的比较多,常见的AOP使用的底层实现就是一种动态代理。 在面试中经常考察设计模式,一般都会问你工作中常用哪几种设计模式,当你说了几种设计模式的时候,一般就会问你什么时候回用到这种设计模式?这个很关键,这个是考察你在工作中是否真正的用到过这种设计模式的一种方式。1,什么时候用代理模式? 代理模式,简言之,就是用一个代理类,代理当前类。 那为什么要这么做呢? 一般是因为一个类原创 2017-10-10 11:10:15 · 247 阅读 · 0 评论 -
命令模式(14)--命令模式
什么是命令模式? 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。命令模式的应用场景? 在某些场合,比如要对行为进行”记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将”行为请求者”与”行为实现原创 2017-10-19 11:00:43 · 173 阅读 · 0 评论 -
设计模式(4)--责任链模式
什么是责任链模式? 责任链模式早代码重构中用的比较多,责任链模式就是一个请求,通过一个组装好的责任链来进行处理,责任链根据请求中的参数的不同选择不同的节点来处理问题。 达到请求和处理的解耦。责任链的使用场景? 责任链本身就是一个更灵活的if….else, 如果代码中有了多个条件判断的时候(多于三个),就可以考虑使用责任链来进行代码的重构,当然责任链也有很多其他的应用场景,如struts的过滤原创 2017-10-10 15:02:34 · 213 阅读 · 0 评论 -
设计模式(24)--访问者模式
什么是访问者模式? 在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。优点: 1、符合单一职责原则。 2、优秀的扩展性。 3、灵活性。 缺点: 1、具体元素对访问者公布细节,违反了迪原创 2017-10-25 10:53:17 · 215 阅读 · 0 评论 -
设计模式(25)--MVC模式
*什么是MVC模式?* MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。 View(视图) - 视图代表模型包含的数据的可视化。 Controller(控制器) - 控制器作用于模型和视图上。它控制数据原创 2017-10-27 10:49:12 · 203 阅读 · 0 评论 -
设计模式(26)--业务代表模式
什么是业务代表模式? 业务代表模式(Business Delegate Pattern)用于对表示层和业务层解耦。它基本上是用来减少通信或对表示层代码中的业务层代码的远程查询功能。在业务层中我们有以下实体。 客户端(Client) - 表示层代码可以是 JSP、servlet 或 UI java 代码。 业务代表(Business Delegate) - 一个为客户端实体提供的入口类,它提供了原创 2017-10-27 11:07:42 · 419 阅读 · 0 评论 -
设计模式(27)--组合实体模式
什么是组合实体模式? 组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。 组合实体(Composite Entity) - 它是主要的实体 bean。它原创 2017-10-27 11:48:45 · 559 阅读 · 0 评论 -
设计模式(28)--数据访问对象模式
什么是数据访问对象模式? 数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。 数据访问对象接口(Data Access Object Interface) - 该接口定义了在一个模型对象上要执行的标准操作。 数据访问对象实体类(Data Access Objec原创 2017-10-27 13:39:43 · 502 阅读 · 0 评论 -
设计模式(29)-前端控制器模式
什么是前端控制器模式? 前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。 前端控制器(Front Controller) - 处理应用程序所有类型请求的单个处理程序,应用程序可以是基于 web 的应原创 2017-10-27 14:00:34 · 428 阅读 · 0 评论 -
设计模式(30)--拦截过滤器模式
什么是拦截过滤器模式? 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。 过原创 2017-10-27 14:37:30 · 270 阅读 · 0 评论 -
设计模式(31)--服务定位模式
什么是服务定位模式? 服务定位器模式(Service Locator Pattern)用在我们想使用 JNDI 查询定位各种服务的时候。考虑到为某个服务查找 JNDI 的代价很高,服务定位器模式充分利用了缓存技术。在首次请求某个服务时,服务定位器在 JNDI 中查找服务,并缓存该服务对象。当再次请求相同的服务时,服务定位器会在它的缓存中查找,这样可以在很大程度上提高应用程序的性能。以下是这种设计模原创 2017-10-27 15:00:18 · 448 阅读 · 0 评论 -
TDDL 在分布式下的SEQUENCE原理
在数据库中创建 sequence 表,用于记录,当前已被占用的id最大值。每台客户端主机取一个id区间(比如 1000~2000)缓存在本地,并更新 sequence 表中的id最大值记录。客户端主机之间取不同的id区间,用完再取,使用乐观锁机制控制并发。TDDL大家应该很熟悉了,淘宝分布式数据层。很好的为我们实现了分库分表、Master/Salve、动态数据源配置等功能。那么分布...原创 2018-07-25 10:06:23 · 1697 阅读 · 0 评论