设计模式中的OOP和OOD
OOP三大基本特性
- 封装
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类操作,对不可信的进行信息隐藏。- 继承
继承是指这样一种能力,它可以使用现有的类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展。- 多态
多态指一个类实例的相同方法在不同情形有不同的表现形式。具体来说就是不同实现类对公共接口有不同的实现方式,但这些操作可以通过相同的方式(公共接口)予以调用。
OOD七大原则
面向对象设计(OOD)有七大原则(是的,你没看错,是七大原则,不是六大原则),它们互相补充。
- 开-闭原则
Open-Close Principle(OCP),即开-闭原则。开,指的是对扩展开放,即要支持方便地扩展;闭,指的是对修改关闭,即要严格限制对已有内容的修改。开-闭原则是最抽象也是最重要的OOD原则。简单工厂模式、工厂方法模式、抽象工厂模式中都提到了如何通过良好的设计遵循开-闭原则。- 里氏替换原则
Liskov Substitution Principle(LSP),即里氏替换原则。该原则规定“子类必须能够替换其父类,否则不应当设计为其子类”。换句话说,父类出现的地方,都应该能由其子类代替。所以,子类只能去扩展基类,而不是隐藏或者覆盖基类。- 依赖倒置原则
Dependence Inversion Principle(DIP),依赖倒置原则。它讲的是“设计和实现要依赖于抽象而非具体”。一方面抽象化更符合人的思维习惯;另一方面,根据里氏替换原则,可以很容易将原来的抽象替换为扩展后的具体,这样可以很好的支持开-闭原则。- 接口隔离原则
Interface Segration Principle(ISP),接口隔离原则,“将大的接口打散成多个小的独立的接口”。由于Java类支持实现多个接口,可以很容易的让类具有多种接口的特征,同时每个类可以选择性地只实现目标接口。- 单一职责原则
Single Responsibility Principle(SRP),单一职责原则。它讲的是,不要存在多于一个导致类变更的原因,是高内聚低耦合的一个体现。- 迪米特法则/最少知道原则
Law of Demeter or Least Knowledge Principle(LoD or LKP),迪米特法则或最少知道原则。它讲的是“一个对象就尽可能少的去了解其它对象”,从而实现松耦合。如果一个类的职责过多,由于多个职责耦合在了一起,任何一个职责的变更都可能引起其它职责的问题,严重影响了代码的可维护性和可重用性。- 合成/聚合复用原则
Composite/Aggregate Reuse Principle(CARP / CRP),合成/聚合复用原则。如果新对象的某些功能在别的已经创建好的对象里面已经实现,那么应当尽量使用别的对象提供的功能,使之成为新对象的一部分,而不要再重新创建。新对象可通过向这些对象的委派达到复用已有功能的效果。简而言之,要尽量使用合成/聚合,而非使用继承。《Java设计模式(九) 桥接模式》中介绍的桥接模式即是对这一原则的典型应用。
什么是设计模式
- 可以用一句话概括设计模式———设计模式是一种利用OOP的封闭、继承和多态三大特性,同时在遵循单一职责原则、开闭原则、里氏替换原则、迪米特法则、依赖倒置原则、接口隔离原则及合成/聚合复用原则的前提下,被总结出来的经过反复实践并被多数人知晓且经过分类和设计的可重用的软件设计方式。
设计模式的24种实现
代理模式(静态代理和动态代理以及spring中的应用场景和面试题)- 责任链模式(ApplicationFilterChain和StandardEngine,StandardHost,StandardContext都有一个basic valve这个valve在链的末尾用来激活子容器的valve链。让多个对象形成一个链状结构,让每个对象都有机会处理请求,设计意图是为了使事件发送者和事件接受者之间解耦)
tomcat中的应用,简单代码实现- 工厂模式(DefaultListBeanFactory继承了AbstractAutowireCaptableBeanFactory实现了Autowired功能,实现了BeanDefinitionRegistry接口用来保存bean定义,而BeanFactory最顶层提供了getBean方法作为工厂。)
https://www.jianshu.com/p/c548cbbe9eb4单例模式(目的是为了保证只有一个实例,并且提供一个访问这个实例的统一接口。)- 原型设计模式(copy复制——scope的bean)
https://www.jianshu.com/p/611be5eb42a1- 策略模式(动态代理和cglib)
https://www.jianshu.com/p/ffd8dad0f7b7- 门面模式(包装—-dubbo)
https://www.jianshu.com/p/8dd52b5a5466- 适配器模式(通用——mvc执行的controler找适配器找到对应的方法)
https://www.jianshu.com/p/feb4495633b4- 装饰器模式(增加修饰——-scope的bean)
https://www.jianshu.com/p/3d596976f3af- 模板模式(模板设计模式是一种行为设计模式,它使用一个抽象类定义了一个模板,这个模板里面定义了一系列的接口,子类则只需要继承该抽象类并且根据需要重写一部分接口。比如CRUD操作)
设计模式——-建造者模式(SqlSessionFactoryBuilder包装细节)
建造者模式是一种创建型模式,将一个复制对象的创建屏蔽到接口内部,用户使用时候只需要传递固定的参数,内部就会执行复杂逻辑后返回会用户需要的对象,用户不需要知道创建的细节。
https://www.jianshu.com/p/0d9ec3e74b5f- 观察者模式(发布和订阅)
https://www.jianshu.com/p/fedbe2bbdad8- 命令模式
https://www.jianshu.com/p/90f9b72f3503
来源:小诚信驿站
声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!