设计模式

八大原则:依开单替,接优封针

依:依赖倒置原则

高层次的代码不应该依赖低层次的代码,应该依赖抽象、抽象的代码不应该依赖具体的代码

开:开闭原则

对扩展开放,对修改关闭

单:单一职责

一个类应该仅有一个变化的原因,该变化隐含了它的职责,职责太多会造成混乱

替:替换原则

子类必须能够替换他的基类,继承可以表达类型抽象

接:接口隔离原则

接口应该小而完备,不该强迫用户使用多余的方法

优:优先使用组合而不是继承

继承通常会让子类和弗雷的耦合度增加、组合的方式只要求组件具备良好定义的接口

封:封装变化点

针:针对接口编程,而不是针对实现编程

 

一、策略模式

产生的动机:某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担,因为会失效的代码也会判断。 违背开闭原则

一般出现多种  if elseif    的时候就可以使用策略模式

一般要结合工厂模式

二、观察者模式

我们需要为某些对象建立一种“通知依赖关系”   一个对象(目标对象)的状态发生改变,所有的依赖对象都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好的抵御变化。

定义对象间的一种一对多变化的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。

使用面向对象的抽象, observer模式是的我们可以独立的改变目标与观察者,从而使二者之间的依赖关系达到松耦合。

目标发送通知时,无需指定观察者,通知会自动传播。

观察者自己决定是否需要订阅通知,目标对象对此一无所知。

 

三、 模板方法

对于某一项任务,他常常有稳定的整体操作结构

模板方式是一种非常基础性的设计模式, 在面向对象系统种有着大量的使用。他用最简洁的机制(虚函数的多态)。

在具体实现方面,被模板方法调用的虚方法可以具体实现,也可以没有任何实现,但一般会推荐把他们设置为protected方法

  四、装饰模式(组合优于继承 )

在某些情况下我们可能会过度地使用继承来扩展对象的功能, 由于继承为类型引入的静态特质, 使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。

经验之谈:如果父类和其中一个成员变量是同一个类,可能就是装饰模式

通过采用组合而非继承的手法,decorator模式实现了在运行时动态扩展对象功能的能力,而且可以根据需要扩展多个功能。

改成

 五、工厂方法(依赖倒置原则)

 在软件系统中,经常面临着创建对象的工作,由于需求的变化,需要创建的对象的具体类型经常变化。

定义一个用于创建对象的接口,让子类决定实例化哪一个类。为了解耦。

六、抽象工厂

经常面临着一系列相互依赖的对象,包含工厂方法。着重于系列问题

 

七、单例模式

经常有这样一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保他们的逻辑正确性、以及良好的效率。

饿汉模式(先创建)、懒汉(后创建)

双加锁(存在内存排序的问题),解决办法:加上内存栅栏

静态创建

 

posted @ 2024-01-22 12:33  放弃吧  阅读(4)  评论(0编辑  收藏  举报