Giter VIP home page Giter VIP logo

design-pattern-java-code's Introduction

设计模式(Design Pattern)

软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。

设计模式的七大原则

单一职责原则(Single Responsibility Principle, SRP)

单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。

作用:降低类耦合度、提高类可读性、提高系统维护性、降低变更引起的风险。

注:单一职责同样也适用于方法。一个方法应该尽可能做好一件事情。如果一个方法处理的事情太多,其颗粒度会变得很粗,不利于重用。

开闭原则(Open Closed Principle, OCP)

软件实体应当对扩展开放,对修改关闭。

作用:对软件测试友好、可提高代码的可复用性、可提供软件的可维护性。

里氏替换原则(Liskov Substitution Principle, LSP)

任何基类可以出现的地方,子类一定可以出现;子类可以扩展父类的功能,但不能改变父类原有的功能。

作用:克服重写父类造成的可复用变差问题、保证类的扩展不会给已有系统引入新的错误等。

依赖倒置原则(Dependence Inversion Principle, DIP)

高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。

作用:降低类的耦合性、提高系统稳定性、减少并发开发造成风险、提供代码可读性和可维护性。

接口隔离原则(Interface Segregation Principle, ISP)

客户端不应该被迫依赖于它不使用的方法;要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

作用:将臃肿庞大的接口分解为多个粒度小的接口,预防外来变更的扩散、提高了系统的高内聚、保证系统的稳定性。

迪米特法则(Law of Demeter, LoD)

一个类对自己依赖的类知道的越少越好,也称最少知道原则。

作用:低耦合、高内聚。

组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP)

也称合成复用原则;在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

作用:维持类的封装性、新旧类的耦合度低、复用灵活性高。

使用法则: 1、子类是基类的一个特殊种类,而不是基类的一个角色。区分 Has-AIs-A 。只有 Is-A 关系才符合继承关系,Has-A 关系应当用聚合来描述。 2、永远不会出现需要将子类换成另外一个类的子类的情况。如果不能肯定将来是否会变成另外一个子类的话,就不要使用继承。 3、子类具有扩展基类的责任,而不是具有置换掉(override)或注销掉(Nullify)基类的责任。如果一个子类需要大量的置换掉基类的行为,那么这个类就不应该是这个基类的子类。 4、只有在分类学角度上有意义时,才可以使用继承。不要从工具类继承。

设计模式分类

参考链接

面向对象设计原则

design-pattern-java-code's People

Contributors

cuizhenjie 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.