一些常用设计模式

简单工厂模式

简单工厂属于创建型模式,这是一个工厂对象决定创建出哪一种产品类的实例。简单工厂有如下角色:

  • Factory工厂类,这是简单工厂模式的核心,工厂类的创建产品类的方法可以被外界直接调用,创建所需产品的对象。
  • IProduct:抽象产品类,这是简单工厂所有产品的父类,负责描写所有产品的共有的公共接口。
  • Product:具体产品类,这是简单工厂的创建目标。

简单工厂的使用场景:
优点:用户根据参数获得对应的产品,减少了耦合。
缺点:可实例化的类型在编译期间就已经确定。

工厂方法

定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。工厂方法有如下角色:

  • Product:抽象产品类。
  • ConcreteProduct:具体产品类,实现Product接口。
  • Factory:抽象工厂类,返回一个product。
  • ConcreteFactory:具体工厂类,返回ConcreteProduct实例。

简单工厂和抽象工厂的区别,简单工厂没有抽象工厂的,在需要新增产品的时候会修改工厂类,违背了开闭原则而工厂方法不会违背这个开闭原则。

建造者模式

将构成复杂对象的过程和部件解耦。

代理模式

为其他对象提供一种代理以控制这个对象。代理模式有如下角色:

  • Subject:抽象主题类,声明真实主题和代理的共同接口方法。
  • RealSubject:真实主题类,代理类所代表的真实主题,客户端通过代理类间接调用真实主题类的方法。
  • Proxy:持有对真实主题类的引用,在其涉嫌的接口方法中调用真实的主题类中相应的接口方法执行。

代理类分为静态代理和动态代理,动态代理是在运行过程中通过反射来生成代理的对象。Java提供了动态的代理接口InvocationHandler,实现该接口需要重写invoke方法。

装饰模式

在不改变类文件和使用继承的情况下,动态的扩展一个对象的功能。在装饰者模式下有如下角色:

  • Component:抽象组件,就是被封装的最原始的对象。
  • ConcreteComponent:组件的具体实现类。被装饰的具体对象。
  • Decorator:抽象的装饰类,从外类来扩展Componet的功能。
  • ConcreteDecorator:装饰者的具体实现类。
外观模式

使一个子系统的外部与内部的通信必须通过一个统一的对象来进行。有如下角色:

  • Facade:外观类,知道哪些子系统处理请求,将请求代理给适当的子系统对象。
  • Subsystem:用于处理外观类派出的请求。
享元模式

使用共享对象有效地支持大量细粒度的对象。
Flyweight:抽象享元角色,同事定义对象的外部状态和内部状态。
ConcreteFlyWeight:具体享元角色,实现享元角色定义的业务。
FlyWeightFactory:享元工厂,负责管理对象池和创建享元对象。

策略模式

定义一系列的算法,把每一个算法封装起来,并且使它们可以相互替换,使得算法可以独立于使用它的客户而独立变化。在策略模式下有如下角色:

  • Context:上下文角色,用来操作策略的上下文环境,起到承上启下的作用,屏蔽高层模块对策略,算法的直接访问。
  • Stragety:抽象策略角色,通常为接口。
  • ConcreteStragety:具体的策略实现。
    优点:避免了多重的判断。
    缺点:每一个策略都要新的类,上层必须知道有哪些方法,违背了迪米特原则。
模板方式

定义一个算法的框架啊,将一些步骤延迟到子类中。有如下角色:

  • AbstractClass类:抽象类,定义了一套算法框架。
  • ConcreteClass:具体实现类。
观察者方式

定义对象间的一种一对多的关系,每当一个对象状态改变时,所有依赖它的对象都会得到通知并被自动更新。有如下角色:

  • Subject:抽象主题,每个主题都可以有任何数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。
  • ConcreteSubject:具体主题,将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。
  • Observer:抽象观察者,定义类一个更新接口,使得在主题更改通知的时候更新自己。
  • ConcreteObserver:具体观察者,实现抽象观察者定义的更新接口。

多用在消息交换的场景,如消息队列,事件总线的处理机制。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值