阅读大话设计模式

代码要求:易维护,易扩展,易复用,灵活多样

UML类图:

阅读大话设计模式_第1张图片

一、三个原则

1.   单一职责原则:

就一个类而言,应该仅有一个引起它变化的原因。

软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。

如果我们能想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离。

2.  开放-封闭原则:

软件实体(类、模块、函数等)应该可以扩展,但是不可以修改,对于扩展是开放的,对于修改是封闭的。

3.   依赖倒转原则:

      高层模块不应该依赖底层模块,两个都应该依赖抽象。抽象不应该依赖细节,细节应该依赖于抽象,通俗的来说就是,针对接口编程,不要对实现编程。

      里氏代换原则:一个软件实体如果使用的是一个父类,那么一定使用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化。

     依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计。

 

二、设计模式

1.单例模式:

a.为什么我们需要单例模式:

比如你的应用程序有一个applicaiotn类,然后有一个个app对象,显然每个应用只应该有一个这样的对象。 但是你又怕其他开发者一不小心实例化了这个对象。那么需要单实例模式。

 要做到单实例只需要简单的做到三点点即可:

    A. 将你的将你的构造函数设为private的,这样就没人能创建这个类.

    B.创建一个全局唯一实例

    C.提供一个接口来获得这个实例。

阅读大话设计模式_第2张图片

优缺点:

可惜这个类不是线程安全的,如果要线程安全,需要自己加锁。这点我们后面再实现。所以在需要使用全局配置、唯一资源的时候。防止再次实例化的时候,这时请采用单实例模式。欧拉~~~

 

2.工厂模式:

a.简单工厂模式:

阅读大话设计模式_第3张图片

其中,factory负责创建我们需要的product类,通过swtichcase或者if else之类的进行选择,这样的话当我们需要增加新的product类时,需要对Factory类进行修改,才能创建出正确的product对象。

 


 

b.工厂模式:

工厂模式与简单工厂模式的区别:工厂模式通过实现工厂factory接口,对于每一个产品product都有一个对应的工厂factory进行生产,在简单工厂模式中产品的生产都是通过一个factory类进行增加的,所以当增加需求时,factory肯定会进行修改,而在工厂模式中,当我们需求增加时,我们无需改动源factory类,只需再实现一个factory接口,然后再实现一个product接口,就能得到我们想要的产品。(这里的工厂模式实现的是源工厂接口,也可以是继承源工厂类)。重要的是一种思想,将需要改变的东西通过继承或者实现来完成,因为增加的是一类东西,所以子类通过重载父类或者父接口的方法就可以达到要求。

优缺点:

虽然工厂方法模式满足了"开放-封闭”原则,但是这个模式也仍然有缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,是的系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

 

c. 策略模式:

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

优点:
1、 使用策略模式可以避免使用多重条件转移语句。多重转移语句不易维护。
2、 策略模式让你可以动态的改变对象的行为,动态修改策略

缺点:
1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2、类过多---策略模式造成很多的策略类,每个具体策略类都会产生一个新类。(这点可以通过享元模式来克服类过多)

 

自我感觉:策略模式与工厂模式的区别,策略模式中使用的是在Context中,保存一个strategy的对象,当我们要使用某一个具体的子Strategy时,只需要将对应类的对象,传到Context中来初始化父Strategy,这样在Context端看起来我们不需要更改什么,通过同一个对象名进行调用,策略模式解决的是一个变化的选择问题,而工厂模式解决的是创建对象的问题。()

 

d.模板方法模式:

总的来说模板方法模式

优点:
1.模板方法模式在一个类中形式化地定义算法,而由它的子类实现细节的处理。
2.模板方法是一种代码复用的基本技术。它们在类库中尤为重要,它们提取了类库中的公共行为。
缺点:
每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,但是更加符合“单一职责原则”,使得类的内聚性得以提高。

e.适配器模式:

我们在构造的时候将具体需要适配的适配对象传入,这样便可以根据传入不同的对象,从而对该对象进行适配。而类适配器却无法选择对象,他是对整个类进行适配。也就是把所有的三相插口全部转换为两相的,而不是针对某一个。

f.装饰者模式:

装饰者模式主要实现的功能是动态的给某一个类添加一些额外的功能,它是一个锦上添花者。想要扩展功能,装饰者提供了有别于继承的另外一种选择。设计模式的原则是多用组合少用继承。设计模式的原则是多用组合少用继承

适配器模式和装饰者模式的区别:

适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增强新的行为和责任;而外观将一群对象包装起来以简化其接口。要注意装饰着模式的两个抽象类,一个是Compent, 还有一个是Decorator。

g.外观模式

总结:外观模式的主要用途就是为子系统的复杂处理过程提供方便的调用方法,使得子系统更加容易被使用。Façade对象通常属于单实例模式。

h.观察者模式

i.       代理工厂模式:

这个模式和装饰者模式有点类似之处,都是包装,但是请注意他们应用场景不一样:一个是动态的给类添加职责,一个是控制对这个对象的访问。最重要的一点不同是他们的结构不同,你对比下两个模式的uml图便知。

j.组合模式

需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式了。

 

k.命令模式

 

 

你可能感兴趣的:(阅读大话设计模式)