Java设计模式及其运用简述

基本设计模式归类

                                                                      设计模式导图

设计模式具体解说

一、六大原则:

  1. 开闭原则       (对扩展开放,对修改关闭)
  2. 里氏代换原则(封装、继承、多态、抽象)
  3. 依赖倒转原则(面向接口编程,依赖于抽象而不依赖于具体)
  4. 接口隔离原则(使用多个隔离的接口,比使用单个接口要好)
  5. 迪米特法则   (一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立)
  6. 合成复用原则(尽量使用合成 / 聚合的方式,而不是使用继承)

二、创建型模式(5类):

1.工场方法模式

(1) 普通工厂模式(多个对象共用单个创建工厂)

(2) 多工厂方法模式 (一类对象对应一个独立的创建工厂)

(3) 静态工厂方法模式(基于工厂的静态方法直接创建对象,无需维护工厂对象的创建)

2.抽象工厂模式(子类工厂继承自同一抽象父类工厂,各自据需实现父类工厂的抽象创建方法)

3.单例模式(私有构造函数,确保整个JVM运行环境中单例对象只会被创建一次)

(1) 饿汉式(直接初始化实例)

(2) 懒汉式(在需要时再初始化实例,存在线程安全问题,需要加锁,并且尽可能减少同步代码块)

4.建造者模式(将各种产品集中起来进行管理,用来创建复合对象(某个类具有不同的属性))

5.原型模式(需要实现Cloneable接口,覆写Object 的 clone方法。原型模式可用于解决内存中同一对象循环引用问题,避免重复创建新对象)

(1) 浅复制(将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的)

(2) 深复制 (采用流的形式进行复制。将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底)

三、结构型模式(7类):

1.适配器模式

(1) 类的适配器模式

// 继承 
Adapter extends Source implements Targetable

(2) 对象的适配器模式

// 构造器注入或方法注入
Wrapper implements Targetable
     Source source = new Source();  
     Targetable target = new Wrapper(source);

(3) 接口的适配器模式

// 通过继承抽象类只需实现接口中的部分方法, 如我们经常封装的BaseService:
BaseServiceImpl

2.装饰器模式

用于动态地扩展一个类的功能

装饰器类与功能类实现同一个接口,装饰器类中构造函数注入功能类,

在装饰器类的功能方法中,调用功能类的功能方法前后做功能装饰处理

3.代理模式

代理即中介角色

代理类与功能类都实现同一接口,代理类构造器中创建功能类,

在代理类的功能方法中,调用功能类的功能方法的前后代理处理一些事情

4.外观模式

将具有相同操作流程的类,用一个组合类来同一调度控制(类似生产车间)

使各个类按一定的流程依次执行

5.桥接模式

如:JDBC桥接DriverManager

6.组合模式

又叫部分-整体模式,在处理类似树形结构的问题时比较方便,

Node parentNode

List<Node> children

7.享元模式

实现对象的共享,即共享池。如:JDBC 连接池,多线程中的线城池

四、行为型模式(11类):

1.策略模式

将公共处理逻辑方法抽取到父类中,子类处理各自的功能,复用父类公共方法

2.模板方法模式

一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用

3.观察者模式

如:消息订阅

4.迭代器模式

如:集合的迭代遍历操作

5.责任链模式

有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终哪个对象会处理该请求,所以,责任链模式可以实现在隐瞒客户端的情况下,对系统进行动态的调整

6.命令模式

Invoker是调用者(如:司令员),

Receiver是被调用者(如:士兵),

Command是命令

7.备忘录模式

保存一个对象的某个状态,以便在适当的时候恢复对象,举例:

Original类   、 Memento类  、 Storage类

Original类是原始类,包含属性state;Memento类是备忘录类,包含属性state;

Original中的status每次发生变化时,将status值保存到新建的Memento对象中。

Storage类用于收集新建的Memento对象,便于Original类获取历史status数据

8.状态模式

可以通过改变状态来获得不同的行为。如:权限控制

9.访问者模式

访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果,访问者与数据结构相互通过方法参数注入

public void access() {
    Visitor visitor = new MyVisitor();  
    Subject sub = new MySubject();  
    sub.accept(visitor); 
}

@Override  
public void accept(Visitor visitor) {  
    visitor.visit(this);  
}

@Override  
public void visit(Subject sub) {  
    System.out.println("visit the   subject:"+sub.getSubject());  
}

10.中介者模式

只需关心和Mediator类的关系,具体类之间的关系及调度交给Mediator就行,

这有点像spring容器的作用

11.解释器模式

解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值