经典设计模式总结
对于常见的设计模式总结。
平凡的L同学
个人感兴趣的方向:云计算网络,SDN,网络操作系统,量子通信,机器学习,欢迎讨论。
展开
-
组合模式
1.使用场景: 部分和整体之前通过树状结构进行显示,调用者需要达到可以使用统一的方式处理部分对象以及整体对象的目的。 2.UML表示 组合模式主要包括下面的几个角色: 2.1抽象构件:定义叶子和容器构件的共同点。 2.2叶子构件。 2.3容器构件:能够包含子节点。 具体的UML示意图如下: 3.代码实现 下面我们通过一个模拟的杀毒程序对这一设计模式进行讲解: 首先定义我们...原创 2018-02-19 16:36:33 · 303 阅读 · 0 评论 -
享元模式
1.使用场景: 内存资源比较稀缺,不要随便浪费,如果有很多相同或者类似的对象,通过使用享元模式的方法,节省内存,例如线程池以及String类等。 2.UML表示 在享元模式中通常用以下的几类对象: 2.1FlyweightFactory(享元工厂,创建并且管理享元对象) 2.2FlyWeight享元抽象类 2.3ConcreteFlyWeight具体享元类 2.4UnsharedConcre...原创 2018-02-19 16:40:37 · 455 阅读 · 0 评论 -
备忘录模式
1.使用场景: 一系列的操作之后恢复原来的状态。实际的使用场景有事务的回滚操作等。 2.UML表示 在备忘录模式中有以下的几种对象: 2.1源发器:Originator 2.2备忘录类:Memento 2.3负责人CareTake 具体的UML示意图如下: 3.代码实现 首先定义Emp类: public class Emp { private String n...原创 2018-02-18 16:13:48 · 286 阅读 · 0 评论 -
桥接模式
1.使用场景: 分离两个变化的维度,通过组合的方式来减少系统中臃肿繁琐的代码,例如JDBC中的驱动程序。 2.UML表示: 2.1 实现(Implementor):定义具体行为,具体特征的应用接口。 2.2 具体实现(ConcreteImplementor):实现Implementor。 2.3 目标接口(Target): 包含实现具体行为、具体特征的Implementor接口或者类。 ...原创 2018-02-19 16:28:21 · 325 阅读 · 0 评论 -
策略模式
1.使用场景: 我们需要根据不同的需求给出不同的解决方案,如果使用条件判断,这时候如果有新增的类型就会破坏开放封闭原则,这时候就需要使用策略模式。常用的使用场景有Spring框架中的Resource接口等。 2.UML表示 在策略模式中有以下的几种对象: 2.1环境(Context)角色:持有一个Strategy的引用。 2.2抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接...原创 2018-02-18 16:18:58 · 270 阅读 · 0 评论 -
责任链模式
1.使用场景: Tomcat中的过滤器链,springmvc中的拦截器链等等。 2.UML表示 在责任链模式中通常用以下的几类对象: Handler:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。 ConcreteHandler:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具...原创 2018-02-18 16:23:51 · 290 阅读 · 0 评论 -
状态模式
1.使用场景: 常见的应用场景有线程对象各个状态之间的切换或者各种账号状态的管理等 2.UML表示 状态模式中主要有以下的几大角色: 2.1Context:环境类 环境类中维护一个State对象,定义了当前的对象 2.2State:抽象状态类 2.3ConcreteState:具体状态类 每一类封装了一个对应的行为 具体的UML示意图如下: 3.代码实现 下面我们通过一个...原创 2018-02-18 16:26:24 · 224 阅读 · 0 评论 -
访问者模式
1.使用场景: 在一个集合中有一些不同的子类对象,需要分别对这些子类对象做处理。常常应用于XML文档的解析、编辑器的解析等。 2.UML表示: 2.1 Visitor(抽象访问者):抽象访问者为对象结构中每一个具体元素类ConcreteElement声明一个访问操作,从这个操作的名称或参数类型可以清楚知道需要访问的具体元素的类型,具体访问者则需要实现这些操作方法,定义对这些元素的访问操作。 ...原创 2018-02-18 16:32:46 · 253 阅读 · 0 评论 -
解释器模式
1.使用场景: 这个设计模式一般用来解释语句中的句子,实际开发中EL表达式或者正则表达式的解释器就是采用这种设计模式等。 2.UML表示 Expression:抽象表达式,用来表明所有具体表达式需要实现的抽象接口。 Terminal Expression:终结符表达式,实现了抽象表达式所要求的接口。 Nonterminal Expression:非终结表达式 Context:环境,它的任务一...原创 2018-02-18 16:38:09 · 397 阅读 · 0 评论 -
适配器模式
1.使用场景: 由于接口不兼容,需要通过“适配器”来进行协调工作。 2.UML表示 适配器模式中总共有3种角色: 2.1目标接口 客户期待的接口。目标可以是具体的或抽象的类,也可以是接口。 2.2需要适配的类 需要适配的类或者适配者类。 2.3适配器 通过包装一个需要适配的对象,将原有的接口转换成目标接口。 具体的UML示意图如下: 3.代码实现 下面通过一个生活中的一个...原创 2018-02-18 16:43:00 · 342 阅读 · 0 评论 -
装饰模式
1.使用场景: 在已有的功能上边需要动态的添加新的功能。 2.UML表示 在装饰器模式中通常用以下的几类对象: 抽象构件角色(Project):给出一个接口,以规范准备接收附加责任的对象 具体构件角色(Employe):定义一个将要接收附加责任的类 装饰角色(Manager):持有一个构件对象的实例,并定义一个与抽象构件接口一致的接口 具体装饰角色(ManagerA,ManagerB):负责...原创 2018-02-18 16:47:46 · 229 阅读 · 0 评论 -
代理模式
1.使用场景: 需要为其他的对象提供一种代理,来控制该对象的访问。Spring中的AOP技术就使用了代理模式。 2.UML表示 代理模式种有以下的几种对象: 2.1.抽象角色 包含有代理角色和真实角色的公共对外方法。 2.2.真实角色 真实抽象角色,定义真实角色需要实现的一些业务逻辑(真正干事的家伙)。 2.3.代理角色 实现抽象角色,是真实角色的代理通过真实角色的业务逻辑方法来实现抽象方法...原创 2018-02-18 16:54:47 · 300 阅读 · 0 评论 -
外观模式
1.使用场景: 为子系统提供一个统一的入口。封装子系统的复杂性,便于客户调用,常用于一些工具类的封装。 2.UML表示 外观模式包含如下两个角色: (1) Facade(外观角色):在客户端可以调用它的方法,在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任;在正常情况下,它将所有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统对象处理。 (2) SubSystem(子系...原创 2018-02-18 17:01:49 · 635 阅读 · 0 评论 -
单例模式
1.使用场景: 单例模式的作用主要是保证一个类只有一个实例,并且提供一个访问这个实例的全局访问点,通常在以下的场景中使用: 1.读取配置文件 2.设计数据库连接池等等 2.UML表示 从上图中可以看出,单例模式结构图中只包含了一个单例的角色。 3.代码实现 常见的单例模式总共有6种,下面分别对这6种单例模式进行实现: 3.1 懒汉式 特点:懒汉式加载,能够实现延时加载,缺点是调用的效率不...原创 2018-02-17 16:02:19 · 261 阅读 · 0 评论 -
工厂模式(包含3种工厂)
1.使用场景: 1.类不知道自己要创建哪一个对象 2.类用它的子类来指定创建哪个对象 3.客户需要清楚创建了哪一个对象 2.三种不同工厂的区别 简单工厂:针对一种产品。缺点是破坏了开放,封闭原则。 工厂模式: 对简单工厂做了相应的改进,改正了简单工厂破坏开放封闭原则的错误。 抽象工厂:针对于多种产品,和简单工厂以及工厂模式并无太大的关联。 3.UML表示 简单工厂: 工厂模式: 抽象...原创 2018-02-17 16:20:52 · 14095 阅读 · 0 评论 -
建造者模式
1.使用场景: 1.对象的建造非常复杂,需要很多的步骤处理。 2.构建过程的每一步都不是必须要执行的,但是建造出来的还是”同一个东西”,只是出来的产品有一些属性会稍微”弱”一些。 2.UML表示 在建造者模式中有如下的一些对象: 2.1 Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。 2.2 Conc...原创 2018-02-17 16:25:46 · 251 阅读 · 0 评论 -
原型模式
1.使用场景: 1.1.对象类型只有在运行期才能够确定。 1.2.克隆一直对象的副本。 1.3.大同小异的一些对象。 2.UML表示 在原型模式中通常用以下的几类对象: Client角色:使用原型对象的客户程序 Prototype角色:规定了具体原型对象必须实现的接口(如果要提供深拷贝,则必须具有实现clone的规定) ConcretePrototype:从抽象原型派生而来,是客户程序使用的对象,...原创 2018-02-17 16:31:58 · 320 阅读 · 0 评论 -
模板方法模式
1.使用场景: 当实现一个算法的时候,这个算法的整体步骤是固定的,但是某一些算法可能会进行更改。易变的部分我们可以抽取出来,供子类实现。比较常见的应用有Junit单元测试Spring中的JDBCTemplate类等。 2.UML表示 模板方法模式包含如下两个角色: 2.1 AbstractClass(抽象类):在抽象类中定义了一系列基本操作(PrimitiveOperations),这些基本操作可...原创 2018-02-17 16:35:26 · 270 阅读 · 0 评论 -
命令模式
1.使用场景: 所谓命令模式就是将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。在数据库的事务处理部分就使用了命令模式。 2.UML表示 在命令模式中通常包含以下的几组对象: 2.1Invoker调用者/请求者 2.2Receiver接收者 2.3Client客户端 具体的UML示意图如下: 3.代码实现 定义一个...原创 2018-02-17 16:38:59 · 223 阅读 · 0 评论 -
迭代器模式
1.使用场景: 1.1访问一个聚合对象的内容而无需暴露它的内部表示 1.2支持对聚合对象的多种遍历 1.3为遍历不同的聚合结构提供一个统一的接口 其实就是为方便遍历数据服务,像JDK的内置迭代器,就是采用的这种模式。 2.UML表示 迭代器模式主要有以下的角色构成: 2.1迭代器角色:定义遍历元素所需要的方法。 2.2具体迭代角色:实现迭代器接口中定义的方法,完成集合的迭代。 2.3容器角色:一个...原创 2018-02-17 16:42:06 · 276 阅读 · 0 评论 -
观察者模式
1.使用场景: Android开发中的广播机制,Servlet中监听器的实现。 2.UML表示 观察者模式包含如下的一些角色: 2.1 Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。 2.2 ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具体观...原创 2018-02-17 16:44:23 · 285 阅读 · 0 评论 -
中介者模式
1.使用场景: 系统中的关系比较复杂,存在网状的关系。例如经典的MVC模式中的”C”-Controller就是一个中介者对象还有例如Java反射中的invoke()方法中也是使用到了中介者模式。 2.UML表示 2.1 Mediator:抽象中介者角色,定义了同事对象到中介者对象的接口,一般以抽象类的方式实现。 2.2 ConcreteMediator:具体中介者角色,继承于抽象中介者,实现了父类...原创 2018-02-17 16:47:59 · 234 阅读 · 0 评论