Giter Club home page Giter Club logo

design-pattern-java's Introduction

设计模式介绍

  • 代表了代码的最佳实践,被有经验的开发人员所使用
  • 设计模式是很多被反复使用并知晓,主要是对代码和经验的总结
  • 使用设计模式是为了重用代码,让代码更容易被他人理解,保证代码的可靠性
  • 对接口编程而不是对实现编程
  • 优先使用对象组合而不是继承关系

设计模式的七大原则

开闭原则

  • 对扩展开放,对修改关闭
    • 编写软件,比如类、模块、方法
  • 使用抽象进行构建,使用实现扩展细节
  • 面向抽象编程
  • 提高软件系统的可复用性和可维护性

依赖倒转原则

  • 依赖倒转原则是开闭原则的基础,针对接口进行编程
  • 依赖抽象,而不是具体的实现
  • 可以减少类之间的耦合性,提高系统稳定性,提高代码可读性和可维护性
  • 降低修改程序所造成的风险

单一职责原则

  • 一个类/接口/方法,只负责一项职责
  • 降低程序的复杂度,提高程序可维护性,降低了变更所带来的风险

接口隔离原则

  • 使用多个接口,而不是使用单一的接口
  • 尽量细化接口,接口中的方法尽量少
  • 符合低耦合的设计**,提高了可扩展性和可维护性

迪米特原则

  • 一个对象应该对其他对象保持最少的了解,又被称为最少知道原则
  • 降低类鱼类之间的耦合关系
  • 强调只和朋友(成员变量/方法中输入或输出的参数)交流,不和陌生人说话

里氏替换原则

  • 里氏替换原则是继承复用的基石,也是对开闭原则的补充
  • 子类可以扩展父类的功能,但是不能修改父类的原有功能
  • 子类可以实现父类的抽象方法,但是不能覆盖父类原有的方法
  • 子类中可以增加自己特有的方法
  • 对子类的继承关系进行约束,也是开闭原则的补充
  • 可以增加程序的健壮性

合成复用原则

  • 尽量使用组合/聚合的方式,而不是使用继承关系达到软件复用的目的
  • 可以使系统更加灵活,降低类与类之间耦合度,一个类的变化对其他类造成的影响相对较小

设计模式类型

  • 创建型模式
    • 隐藏了创建对象的过程,通过逻辑方法创建对象,而不是通过 new 关键字进行创建
      • 简单工厂方法模式
      • 抽象工厂模式
      • 单例模式
      • 建造者模式
      • 原型模式
  • 结构性模式
    • 主要关注类和对象的组合关系
    • 继承概念被用来组合接口和定义组合对象,获得新的功能方式
      • 适配器模式
      • 桥接模式
      • 组合模式
      • 装饰模式
      • 外观模式
      • 享元模式
      • 代理模式
  • 行为型模式
    • 主要关注对象之间的通信
      • 责任链模式
      • 命令模式
      • 解释器模式
      • 迭代器模式
      • 中介者模式
      • 备忘录模式
      • 观察者模式
      • 状态模式
      • 策略模式
      • 模板方法模式
      • 访问者模式

design-pattern-java's People

Contributors

zktkzc avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.