博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开发中的重点-----设计模式
阅读量:7069 次
发布时间:2019-06-28

本文共 1484 字,大约阅读时间需要 4 分钟。

说到设计模式,要先了解设计模式的原则:

  • 总原则--开闭原则:开闭原则就是对外扩展开放,对内修改关闭,这样易于维护和升级,实现热插拔的效果。
  • 单一职责原则:即每一个类都只应该实现单一的职责。
  • 里氏替换原则:即基类可以出现的地方,子类也一定可以出现
  • 依赖倒转原则:这个是开闭原则的基础,在面向接口编程中,依赖于抽象而不依赖于具体,在写代码时用到具体的类时,是与类上级的接口交互,而不是直接与类交互。
  • 接口隔离原则:接口隔离是指每个接口不存在子类用不到却必须实现的方法。
  • 迪米特法则:一个类对自己依赖的类知道的越少越好。
  • 合并复用原则:原则上尽量使用聚合、合并的方式实现,而不是使用继承。

了解了以上设计模式的设计原则,在去理解和学习设计模式就很简单了,在我们开发中设计模式一共23种,这里简单介绍常用的几种:

  1. 工厂模式:通过调用方法进行实例化对象,可解决对象产生过多等问题,例如spring的核心就是工厂模式
  2. 单例模式:一个类在java虚拟机中只有一个对象,并提供一个全局访问点。使对象唯一,防止性能浪费。模式结构分为懒汉式和饿汉式,一般是使用懒汉式,因为懒汉式性能优化,懒汉式在方法里面进行初始化的,下面看代码(有时候面试的时候让手写)
//饿汉式 public class HSingleton{  pravite static HSingleton hurgry = new HSingletion();  private HSingleton(){}  public static HSingleton getSingletonHurgry(){    return hurgry;  }} //懒汉式 public class LSingleton{
  private static LSingleton instence = null;   private LSingleton(){}   public static LSingleton getInstence(){
    if(instence == null){
    instence = new LSingleton();     }     return instence;   } }

  3.代理模式:为其他大对象提供一个代理,以控制对当前对象的访问,或者减少太大资源的消耗。例如spring AOP的实现,mybatis中的dao层,可以直接调用接口的方法,接口中的方法就是代理方法。

  4.策略模式:设计一个顶级接口,用不同的算法方法去实现相同的功能,就是策略模式。

  5.模板模式:定义一个流程,在实现某个模块功能的时候,按照这个流程开发。应用:定义一个抽象父类定义流程,或者常用的方法和常量,子类实现父类,实现具体细节方法。

  6.装饰模式:对一个对象做一些装饰,使对象具备新的功能,而且是动态的。要求装饰对象和被装饰对象实现同一个接口

23种设计模式种以上几种比较常用,有兴趣的可以在网上了解一下其他几种:总结如下

  • 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
  • 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
  • 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

 

转载于:https://www.cnblogs.com/bestxyl/p/9806346.html

你可能感兴趣的文章
用webmagic实现一个java爬虫小项目
查看>>
【uva 658】It's not a Bug, it's a Feature!(图论--Dijkstra或spfa算法+二进制表示+类“隐式图搜索”)...
查看>>
java for 的用法总结
查看>>
解决 多列 布局 左右等高问题
查看>>
Ubuntu 下新建用户
查看>>
gulp配置
查看>>
linux命令截取文件最后n行(所有命令)
查看>>
linux提取指定列字符并打印所有内容(awk)
查看>>
减治算法求n个数中的最小数的位置
查看>>
css3学习 理论之文本
查看>>
Linux 安装python3.7.0
查看>>
<Linux命令行学习 第二节> CentOS - 远程登录管理工具
查看>>
[转]BEHAVOUR TREE2
查看>>
深入理解计算机操作系统(十)
查看>>
XML和Schema命名空间详解
查看>>
npm ERR! Unexpected end of JSON input while parsing near '...inimist":"^1.2.0"}
查看>>
Mybatis Generator逆向工程的使用
查看>>
设计模式(八)_门面模式
查看>>
BFS - 水题
查看>>
软件面试常见题目(转帖)
查看>>