设计模式

雨燕双飞 提交于 2020-02-06 17:13:10

第一章节 工厂模式

1.面向对象的好处?

2.UML图

3.简述简单工厂模式

  假如我们需要写一个加减乘除的计算器程序,如果使用面向过程的思维来解决这个问题,一旦我们修改了其中某些需求(比如增加开根号的运算),那么我们就会关于运算部分的代码,这对于一些系统来说是很有风险的操作。也不符合面向对象的封装的方法。   我们可以把界面和运算进行分层出来,界面类处理界面的事情,运算类只处理运算逻辑。这样是非常可以扩展的,如果我们需要增加一种运算,我们只需要多写一个运算类继承运算基类。   如何让计算机知道你将要使用哪个运算类呢?及对象的实例化问题,到底要实例化谁,未来会不会增加实例化对象,这些很容易变化的部分。我们可以使用一个单独的类来做这个创造实例的过程,这就是工厂。
编程是一门技术,更加是一门艺术

第二章节 策略模式

1.商场促销问题

  比如商场打不同的折扣,双十一打五折,公司周年庆打四折,每周五打八折。商场不仅仅有打折问题,还有 满多少返现多少,比如满300返现100。商场积分问题,100块可以积10分。这一系列的问题,都应考虑到,不可能每次都要去修改代码后重新编译部署。这就是一个策略问题。   对于打折问题,以前学过简单工厂,我们可以写一个基类,然后打不同的折扣去继承这个基类,这样写不符合面向对象封装的方法。不管打多少折都是打折,没必要写那么多的类。 2.策略模式
  策略模式:它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 策略模式是封装算法的,需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性,比如超市各种方式的促销活动。
引入反射

2.策略模式与简单工厂模式的区别?

3.策略模式的应用

第三章节 单一职责原则

就一个类而言,应该仅有一个引起它变化的原因
  如果一个类承担的职责过多,就等于把这些职责偶合在一起,一个职责的变化可能会削弱或抑制这个类完成其它职责的能力。
再设计一个俄罗斯方块游戏的时候,我们可以把界面和逻辑分开来进行设计,一般界面是很容易进行改变的,但是逻辑一般都不会进行改变。PC上的俄罗斯方块,我们可以通过更改界面类把它给移植到Android端。如果把全部都给蹂躏在一堆,那还得进行全部的修改,将会耗费更大的开销。只干一件事,总比什么事都干要好。相机用来拍照,mp3用来听歌,这些都是他们的单一职责。

第四章节 开放-封闭原则 OCP原则

  *开放封闭原则,是说软件实体应该可以扩展,但是不可以修改*。 其实可以这样理解,对于扩展是开放的,对于修改则是封闭的。最初编写代码的时候,假设变化不会发生,但当变化发生时候,我们就创建抽象来隔离以后发生的同类的变化。面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。此乃开放封闭原则的精神所在。
  开发者应该仅对程序中呈现出频繁变化的那部分进行抽象,而不是时时刻刻的对每个部分进行同样的抽象,及拒绝不成熟的抽象和抽象本身一样的重要。

第五章节 依赖倒转原则

  *抽象不应该依赖细节,细节应该依赖于抽象*。意为要针对接口编程,不要对实现编程。
  依赖倒转原则:
>高层模块不应该依赖底层模块,都应该依赖于抽象。 >抽象不应该依赖细节,细节应该依赖抽象。

里氏代换原则:简单来说子类型必须能够替换掉他们的父类型。依赖倒转是面向对象的标志,不管使用哪种编程语言吗,编写时考虑的都是如何针对抽象编程而非细节编程,及所有的依赖关系都是终止于抽象类或接口,这就是面向对象的设计。

第六章 装饰模式 模糊

  *装饰模式*,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

第七章 代理模式

第八章 工厂方法模式

基本概念

大专栏  设计模式工厂方法模式 定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。

第九章 原型模式

基本概念

*原型模式*用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。   它其实不用重新的初始化对象,而是动态的获得对象运行时的状态。
##第十章 模板方法模式
  当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。

基本概念

模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

十一章 迪米特法则

基本概念

*迪米特法则*,也叫最少知识原则。如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

第十二章 外观模式

基本概念

*外观模式*为子系统中的一组接口体统一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

应用场景

比如当有一个功能很复杂或是很老旧难以维护的系统时候, 我们可以为新系统开发一个外观Facade类,来提供设计对那些复杂功能的接口,新系统与Facade进行交互,Facade来进行与老旧系统的交互复杂的工作。

第十三章 建造者模式

基本概念

*建造者模式*将一个复杂对象的构建与它的表示分离,使得同样的建造过程可以创建不同的表示。

应用场景

建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。

第十四章 观察者模式

基本概念

*观察者模式*定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知 所有观察者对象,使它们能够自动更新自己。
*事件委托*,委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,委托可以看作是对函数的抽象,是函数的类,委托的实例将代表一个具体的函数。

应用场景

当一个对象的改变需要同时改变其它对象的时候。观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使得各自的变化都不影响另一边的变化。

抽象工厂模式

基本概念

*抽象工厂模式*,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
反射
依赖注入

应用场景

第十六章节 状态模式

基本概念

状态模式,当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况,把状态的判断逻辑转移到表示不同状态的一些列类当中,可以把复杂的判断逻辑简化。

应用场景

当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。

第十七章 适配器模式

基本概念

适配器模式,将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
- 类适配器 - 对象适配器

应用场景

双方都不愿意修改时使用适配器适配。

第十八章 备忘录模式

基本概念

备忘录,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。

应用场景

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!