
设计模式
jy352
欢迎互相关注!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
单例模式
单例模式应该算是我们经常遇到的一种模式,比如说线程池就是应用了单例,Spring bean也是运用了单例,单例模式节省了整个系统内存的开销。下面代码基于线程安全的前提下。 1、饿汉式。类加载时就生成了相应的对象。 public class Singleton1 { private static Singleton1 instance = new Singleton1();原创 2018-01-22 00:18:03 · 161 阅读 · 0 评论 -
桥接模式
处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。常见使用场景:JDBC驱动程序。 现在有一个场景:需要实现销售各种类型,品牌的电脑,我们如果按照如下的代码来写,还只是写了联想的,还有更多其他品牌的没写出来。这样的话非常繁琐。于是我们可以采用桥接模式。 public interface Computer1 { void s原创 2018-02-05 01:47:35 · 179 阅读 · 0 评论 -
装饰模式
动态地为一个对象增加新的功能。无需通过继承增加子类就能扩展对象的新功能,使用对象的关联代替继承。常用场景:IO中输入流和输出流的设计。 主要包含以下角色: Component抽象构件角色 ConcreteComponent具体构建角色 Decorator装饰角色 ConcreteDecorator具体装饰角色 下面有一个场景:抽象构件就是一个汽车接口,具体构建就是一个陆地上跑的普通车,原创 2018-02-05 00:52:49 · 177 阅读 · 0 评论 -
代理模式
代理模式就是多一个代理类出来,替原对象进行一些操作。控制对对象的访问,详细控制某个对象的方法,调用这个方法前做前置处理和后置处理。AOP的核心实现机制。 下面有一个场景:一个唱歌的明星,对应的经纪人就相当于代理类,只有唱歌的时候才是明星去唱,其余的比如收钱,会面等事情就是经纪人去做,但是需要注意一点,明星自己也可以收钱,会面的,不过,正如现实一样,明星不是所有人都能见到的,所有,请明星唱歌不可能原创 2018-02-04 18:00:28 · 191 阅读 · 0 评论 -
适配器模式
适配器模式将某个类的接口转换成客户端期望的另一个接口表示。核心是有一个Source类,拥有一个方法待适配,目标接口是 Targetable ,通过 Adapter 类,将Source 的功能扩展到 Targetable 里。主要包括三类:类适配器,对象适配器,接口适配器。常见的应用场景:java.io.InputstreamReader(InputStream) public class Sou原创 2018-02-04 17:09:52 · 178 阅读 · 0 评论 -
原型模式
通过new一个对象需要繁琐的数据准备和访问权限,可以使用原型模式。常见应用场景:cloneable接口和clone方法。 下面有一个场景: public class Person implements Cloneable,Serializable { private String name; private Integer age; private Man man;原创 2018-02-04 14:44:55 · 182 阅读 · 0 评论 -
备忘录模式
备忘录模式就是保存某个对象内部状态的拷贝,这样就可以将对象回复到原先的状态。常见应用场景:数据库事务的回滚操作。 备忘类 public class Emp { private String name; private int age; private double salary; //进行备忘操作,返回备忘对象 public ConcreteEmp原创 2018-01-28 01:04:33 · 146 阅读 · 0 评论 -
观察者模式
当一个对象的状态改变时,它需要通知一系列对象(观察者),令它们做出响应。这就是观察者模式。常用场景:网络游戏,服务器将客户端的状态进行分发。 观察者接口,包含一个update方法。 public interface Observer { void update(Subject subject); } 目标对象类 public class Subject { //存储所有观察原创 2018-01-27 23:52:18 · 129 阅读 · 0 评论 -
建造者模式
适用于某个对象构造过程复杂的情况,实现了构建和装配的解耦。主要包含builder和Director。常见应用场景:StringBuilder中append方法,sql中preparedStatement。 下面看一个具体的场景:比如我要构造一个台灯,需要以下几部分组成:灯泡、支架、底座。 台灯类: public class DeskLamp { private Bulb bulb;原创 2018-02-03 23:31:15 · 204 阅读 · 0 评论 -
工厂模式
实现了创建者和调用者的分离。实例化对象,用工厂方法代替new操作。 主要分为三类: 简单工厂模式:不符合开闭原则,但是实际应用最多。 工厂方法模式:不修改已有类的前提下,增加新的工厂类进行扩展。 抽象工厂模式:不可以增加产品,可以增加产品族。 应用场景:spring中ioc创建管理bean对象。 简单工厂: 下面一个简单的场景,生产车,有CarA和CarB两种车。 public原创 2018-02-03 16:43:04 · 194 阅读 · 0 评论 -
状态模式
用于解决系统中复杂对象的状态转换,以及不同状态下行为的封装问题。主要包含context环境类,state抽象状态类,concreteState具体状态类。具体应用场景:线程对象不同状态的切换。 现在有一个场景是酒店系统,房间状态:已预定,已入住,空闲。这三个状态之间相互切换。 状态接口 public interface State { void handle(); } 房间空闲状原创 2018-01-27 13:39:37 · 146 阅读 · 0 评论 -
模板方法模式
模板方法模式定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。新的子类在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。常用场景:servlet中doGet和doPost方法调用。 现在有一个场景是去银行办理业务,常见的步骤是先排队取号,然后等待,办理业务,最后对服务进行评价。这样的一个过程可以说是银行的一个模板方法。 采用抽象类 public abstract class B原创 2018-01-27 00:30:26 · 164 阅读 · 0 评论 -
策略模式
策略模式对应于解决某一个问题的算法族,允许用户从该算法族任选一个算法解决某一问题,同时可以方便地更换算法和增加新的算法。并且由客户端决定调用哪个算法。常用场景,Spring框架Resource接口,资源访问策略。 现在有一个应用场景,一个服装厂的老板对他的客户根据情况进行不同的折扣,采用策略模式。 首先是策略接口 public interface Strategy { double原创 2018-01-26 02:13:18 · 141 阅读 · 0 评论 -
解释器、访问者模式
解释器模式是一种不常用的设计模式。我们需要开发一种新的语言的时候可以考虑解释器模式,不推荐使用,后期维护起来会很麻烦。 开发中常用的场景: EL表达式处理 正则表达式解释器 SQL语法的解释器 访问者模式 对于存储在一个集合中的对象,它们可能具有不同的类型,对于该集合的对象,可以接受一类称为访问者的对象来访问,不同的访问者其访问方式也有不同。 常用场景 XML文档解析器设计 编译原创 2018-01-26 01:29:39 · 251 阅读 · 0 评论 -
命令模式
将一个请求封装为一个对象,从而可以使我们可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。事务的底层实现也是命令模式。 命令模式主要分为几种角色:命令、命令的执行者、命令的发起者 命令的执行者 public class Receiver { public void action(){ System.out.println("Rece原创 2018-01-26 00:25:58 · 163 阅读 · 0 评论 -
中介者模式
如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量的多对多的关系,将导致关系非常复杂。这个时候我们可以引入一个中介者对象,所有的对象都和中介者对象打交道。简化了对象之间的关系。常用的场景是mvc模式,其中c是中介者,m和v通过c打交道。 下面模拟一个情况。公司内有三个部门:开发部、市场部和财务部。如果任由三个部门分别打交道,比如另外两个部门找财务部要钱。这个是比较复杂的。这个时候总经理原创 2018-01-24 00:54:42 · 182 阅读 · 0 评论 -
迭代器模式
迭代器模式提供一种可以遍历聚合对象的方式。java集合遍历运用的就是迭代器模式。下面自己写一个简单的迭代器。 首先是一个迭代器接口。分别有获取第一个元素,指向下一个元素,等等方法。 public interface MyIterator { void first(); void next(); boolean hasNext(); boolean isFirs原创 2018-01-24 00:02:33 · 145 阅读 · 0 评论 -
责任链模式
将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,不能则传递给链上的下一个对象。常见应用场景:异常机制,try,catch。第一个catch不匹配,则跳到下一个catch执行。 现在有一个场景是:员工请假,当请假天数小于三天的时候,主任审批就可以了,大于等于三天,小于十天的时候,总经理审批,大于等于十天,小于三十天的时候,需要CE原创 2018-02-06 00:29:18 · 185 阅读 · 0 评论