Skip to content

liujunminx/DesignPatternsForJava

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JavaDesignPattern

使用java语言描述23钟常见设计模式

设计模式

适配器模式

  • 目标(Target):目标是一个接口,该接口是客户想使用的接口
  • 被适配者(Adaptee):被适配者是一个已经存在的接口或抽象类,这个接口或抽象类需要适配。
  • 适配器(Adapter):适配器是一个类,该类实现了目标接口并包含有被适配者的引用,即适配器的职责是
    对被适配者接口(抽象类)与目标接口进行适配

责任链模式

  • 处理者(Handler):处理者是一个接口,负责规定具体处理用户请求的方法以及具体处理者设置后继对象的方法
  • 具体处理者(ConcreteHandler):具体处理者是实现处理者接口的类的实例,具体处理者通过处理者接口规定的方法处理的用户请求, 即在接到用户的请求后,处理者将调用接口规定的方法,在执行该方法的过程中,如果发现能够处理用户的请求,就处理相关数据, 否则就反馈无法处理的信息给用户,然后将用户的请求传递给自己的后继对象

命令模式

  • 接受者(Receiver):接受者是一个类的实例,该实例负责执行与请求相关的操作
  • 命令接口(Command):命令是一个接口,规定了用来封装“请求”的若干个方法,比如execute(),undo()等方法
  • 具体命令(ConcreteCommand):具体命令是实现命令接口的类的实例。具体命令必须实现接口中的方法,比如execute(),是该方法封装成一个“请求”
  • 请求者(Invoker):请求者是一个包含接口变量的类的实例,请求者中的command接口的变量可以存放任何具体命令的引用, 请求者负责调用具体命令,让具体命令执行那些封装了“请求”的方法,比如execute方法

装饰模式

  • 抽象组建(Component):抽象组件是一个抽象类。抽象组件定义了“被装饰着”需要进行“装饰”的方法
  • 具体组件(ConcreteComponent):具体组件是抽象组件的一个子类,具体组件的实现称作“被装饰者”
  • 装饰(Decorator):装饰也是一个抽象组件的一个子类,但装饰还包含一个抽象组建声明的变量以保存
    “被修饰者”的引用,装饰可以是一个抽象类也可以是一个非抽象类,如果他是一个非抽象类,则该类是一个 “装饰者”
  • 具体装饰(ConcreteDecorator):具体装饰是一个非抽象子类,具体装饰的实例称为“装饰者”

外观模式

  • 子系统(SubSystem):子系统是若干个类的集合,这些类的实例协同合作为用户提供所需要的功能,
    子系统中的任何类都不包含外观类的引用
  • 外观(Facade):外观是一个类,该类包含子系统中全部或者部分的类的实例引用,当用户想要和系统中的若干个类的实例打交道时 可以替代的和子系统的外观类的实例打交道

工厂模式

  • 抽象产品(Product):抽象类或接口,负责定义具体产品必须实现的方法
  • 具体产品(ConcreteProduct):具体产品是一个类,如果Product是一个抽象类,那么具体产品是Product的子类
    如果Product是一个接口,那么具体产品是实现Product接口的类
  • 构造者(Creator):一个接口或者抽象类,构造者负责定义一个称为工厂方法的抽象方法,该方法返回一个具体产品类的实例
  • 具体构造者(ConcreteCreator):如果构造者是抽象类,具体构造者是实现构造者的子类,如果构造者是接口,那么具体构造者是实现
    构造者的类。具体构造者重写工厂方法并返回一个具体产品实例

观察者模式

  • 主题(Subject): 主题是一个接口,该接口规定了具体主题实现的方法,比如,添加,删除观察者以及通知观察者更新数据的方法
  • 观察者(Observer): 观察者是一个接口,该接口规定了具体观察者用来更新数据的方法
  • 具体主题(ConcreteSubject): 具体主题是实现主题接口类的一个实例,该实例包含了可以经常发生变化的数据,具体主题需要
    使用一个集合,比如ArrayList,存放观察者的引用,以便数据变化时通知具体观察者
  • 具体观察者(ConcreteObserver): 具体观察者是实现观察者接口类的一个实例,具体观察者包含有可以存放具体主题接口变量

中介者模式

  • 中介者(Mediator):中介者是一个接口,该接口定义了同事(Colleague)对象之间进行通信的方法
  • 具体中介者(ConcreteMediator):具体中介者是实现中介者接口的类,具体中介者需要包含所有具体同事
    (ConcreteColleague)的引用,并通过中介者接口中的方法来满足具体同事之间的通信请求
  • 同事(Colleague):一个接口,规定了具体同事需要实现的方法
  • 具体同事(ConcreteColleague):实现同事接口的类,具体同事需要包含具体中介者的引用,一个具体同事
    需要和其他具体同事交互时,只需将自己的请求通知给他所包含的具体中介者的引用

单例模式

只创建一个对象

策略模式

  • 策略(Strategy):策略是一个接口,该接口定义若干个算法标示,即定义了若干个抽象方法
  • 具体策略(ConcreteStrategy):具体策略是实现策略接口的类,具体策略实现策略接口的类,即给出算法标示的具体算法
  • 上下文(Context):上下文是依赖于策略接口的类,即上下文包含有策略声明的变量。上下文提供一个方法,该方法委托 策略变量调用具体策略实现的策略接口中的方法

About

java描述的设计模式

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages