设计模式

简单工厂模式:
1、把具有相同一类事物特性集合在一起建立专门的类供其他类统一处理调用,在客户端处理,把UI和逻辑分开处理

策略模式:
1、是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
2、它是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。

单一职责原则:
1、如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。
最好的办法就是将界面、处理逻辑分开处理,将其责任单一化,具体化

开放、封闭原则:
1、是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改
2、两个特性,对于扩展是开放的,对于更改是封闭的
3、面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码
4、在最初编写代码时,假设变化不会发生。但当变化发生时,我们就创建抽象来隔离以后发生的同类变化。
5、开放-封闭原则是面向对象的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分抽象,然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。

依赖倒转原则:
1、抽象不应该依赖细节,细节应该依赖于抽象,就是针对接口编程,不要对实现编程
2、里氏代换原则;子类型必须能够替换掉它们的父类型
3、依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程化的设计了。

装饰模式:
1、动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活
2、装饰模式是为已有功能动态地添加更多功能的一种方式。
3、当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为,在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需求。而装饰模式却提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择的、按顺序的使用装饰功能包装对象。
4、优点:把类中的装饰功能从类中搬移去除,这样可以简化原有的类。

代理模式:
1、为其他对象提供一种代理以控制对这个对象的访问。

工厂方法:
简单工厂 VS 工厂方法:
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与 具体产品的依赖。
简单工厂模式违背了开放-封闭原则
1、工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类
2、工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题是还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到客户端代码来进行。你想要加功能,本来是改工厂类的,现在是修改客户端!
3、工厂方法客服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点
4、工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但缺点是由于每增加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。(可以利用反射解决)

原型模式:
1、原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。

模板方法:
1、定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2、模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。
3、模板方法模式就是提供了一个很好的代码复用平台。
4、当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。

迪米特法则:
1、如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者(管理类)转发调用。

外观模式:
1、为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
使用外观模式:
1、首先,在设计初期阶段,应该要有意识的将不同的两个层分离,比如MVC在层与层之间建立外观Facade,为复杂的子系统提供一个简单的接口,使得耦合大大降低。
2、在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。
3、在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,此时也为其添加Facade也非常合适
总结:为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

建造者模式:
1、将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
使用建造者模式:
主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

观察者模式:
1、定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
2、将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。
委托:
委托就是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。委托可以看作是对函数的抽象,是函数的类,委托的实例将代表一个具体的函数。

抽象工厂模式:
1、工厂方法模式是定义一个用于创建对象的接口,让子类决定实例化哪一个类。
2、抽象工厂模式:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。
3、依赖注入、反射

状态模式:
1、当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
2、状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
3、使用状态模式:当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为,就可以考虑使用状态模式了。

适配器模式:
1、将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。
2、在软件开发中系统的数据和行为都正确,但接口不符合时,我应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境不一致的情况。
3、使用场景:只有在最后弥补问题的时候再使用适配器模式。

备忘录模式:
1、在不破坏封装行的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
2、Memento模式比较使用与功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Oriiginator可以根据保存的Memento信息还原到前一个状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值