设计模式专栏

目录

创建型模式

单例模式

简单工厂模式、工厂方法模式、抽象工厂模式

原型模式

建造者模式

结构型模式

适配器模式

桥接模式

装饰者模式

组合模式

外观模式

享元模式

代理模式

行为型模式

模板方法模式

命令模式

访问者模式

迭代器模式(单一责任原则)

观察者模式

中介者模式

备忘录模式

解释器模式

状态模式

策略模式

职责链模式



创建型模式

用于描述怎样创建对象,它的主要特点是将对象的创建与使用分离

单例模式

简单工厂模式、工厂方法模式、抽象工厂模式

原型模式

建造者模式

结构型模式

适配器模式

桥接模式

案例:手机类型与手机品牌

将抽象部分与实现部分分离,使他们都可以独立变化,基于类的最小设计原则

用桥接模式替代多层继承方案,可以减少子类的个数。

应用:JDBC的driver接口

应用场景:银行转账系统

装饰者模式

组合模式

案例:院校展示

将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用有一定的一致性。

Component:对象声明接口

Composite:非叶子节点,用于存储子部件

Leaf:叶子节点。没有子节点

应用 HashMap

外观模式

案例:影院管理

1.也叫过程模式,对外提供一个一致的界面,通过这个高层接口,使得子系统更加容易使用

2.定义一个一致的接口,可以屏蔽内部子系统的细节,使得使用端只需要跟这个接口发生调用,无须关心系统的内部细节。

外观模式可以解决多个复杂接口带来的使用困难,起到简化用户操作的作用

应用:MyBaits

享元模式

案例:网站(新闻、博客、公众号)

经典应用场景就是字符串的池、数据库连接池

区分内部状态和外部状态,内部状态不随环境变化而变化,环境共享,外部状态不随内部状态的改变而改变

需要一个工厂类加以控制

应用:Integer.valueOf(),范围在-127-128之间使用享元模式,否则new一个对象

适用于内部状态和外部状态分开

代理模式

行为型模式

模板方法模式

案例:豆浆制作问题

在抽象类中公开定义了执行它的方法的模板,他的子类可以按需要重写方法实现,但调用要按抽象类中定义的方法运行。

钩子方法,默认不做任何事,子类可以视情况决定要不要覆盖它

应用:Spring IOC容器初始化

一般模板方法都加上final关键字,防止子类重写模板方法。

命令模式

案例:智能生活 遥控器 电灯、电视

将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

Invoker:调用者角色

Command:命令角色,需要执行的所有命令都在这里,可以是接口或者抽象类

Receiver:接收者角色,知道如何实施和执行一个请求相关的操作

ConcreteCommand:将一个接收者与一个动作绑定,调用接收者相应操作,完成任务。

应用:JdbcTemplate

不足:可能导致某些系统有过多的具体命令类,增加了系统的复杂度。

访问者模式

案例:歌手打分

Visitor:抽象访问者,为该对象结构的ConcreteElement的每一个类声明一个Visit操作

ConcreteVistor:具体访问者,实现每个由Visitor声明的操作。

ObjectStruture:枚举它的元素,可以提供一个高层的接口允许访问者访问它的元素

Element:定义了一个Accept操作,可以接收一个访问者为参数。

ConcreteElement:实现Accept操作

如果一个系统由比较稳定的数据结构,又有经常变化的状态

迭代器模式(单一责任原则)

案例:院系遍历

提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示(行为型模式)

优点:管理对象集合和遍历对象集合的责任分开    缺点:多个迭代器不好管理类

迭代器解决了不同集合的统一遍历问题

应用:ArrayList,LinkedList,HashTable

观察者模式

中介者模式

用一个中介对象来封装一系列的对象交互。中介使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互。

Mediator:定义了同时对象到中介者对象的接口

Colleague:抽象同事类

ConcreteMediator:具体中介者对象,实现抽象类的方法,它需要知道所有具体同事类,并从同事类接收消息,向具体同事对象发出命令

ConcreteColleague:具体的同事类,每个同事只知道自己的行为,而不了解其他同事类的行为,但是他们都依赖中介者对象

中介者如果出现问题,整个系统就会收到影响。

备忘录模式

案例:游戏战力恢复

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态

使用户能够比较方便地回到某个历史的状态

Originator:对象,需要保存状态的对象

Memento:备忘录对象,负责保存好记录,即Originator内部状态

Caretaker:守护者对象,负责保存多个备忘录对象,使用集合管理,提高效率

解释器模式

案例:四则运算

给定一个语言,定义它的文法的一种表示,使用该解释器解释语言中的句子。可以将句子表示为一个抽象语法树,

Context:环境角色,包含解释器之外的一些全局信息

AbstractExpression:抽象表达式,这个方法为抽象语法树中所有的节点所共享

TerminalExpression:实现与文法找那个的终结符相关的解释操作

NonterminalExpression:为文法中的非终结符实现解释操作

应用:编译器、运算表达式计算、正则表达式、机器人

SpelExpressionParser

状态模式

案例:抽奖

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

State:抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。

ConcreteState:具体状态,每一个子类实现一个与Context的一个状态相关的行为。

Context:维护一个ConcreteState子类的实例,这个实例定义当前的状态.

每个状态的行为都放到一个类中

策略模式

案例:银行收银打折

定义了算法家族,分别封装起来,让他们之间可以互相替换。

应用:Arrays的Comparator使用了策略模式

职责链模式

为请求创建一个接收者对象的链。将请求和处理分开,实现解耦

职责链模式中通常每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者。

Handler:定义了一个处理请示的接口

ConcreteHandler:具体处理者类,处理他所负责的请求,可访问它的后继者。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值