写点什么

第三周作业 - 学习总结

用户头像
jingx
关注
发布于: 2020 年 11 月 09 日

第三周主要学习了几大设计模式以及在各大框架中的应用。

1.简单工厂方法

简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

Factory:工厂类,简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类 的方法可以被外界直接调用,创建所需的产品对象。

IProduct:抽象产品类,简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

Product:具体产品类,是简单工厂模式的创建目标。

工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。

客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。

通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。



2.单例模式

单例模式是单例对象的类只能允许一个实例存在。

实现方式主要有饿汉模式和懒汉模式。

1)优点

在内存中只有一个对象,节省内存空间;

避免频繁的创建销毁对象,可以提高性能;

避免对共享资源的多重占用,简化访问;

为整个系统提供一个全局访问点。

2)缺点

不适用于变化频繁的对象;

滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;

如果实例化的对象长时间不被利用,系统会认为该对象是垃圾而被回收,这可能会导致对象状态的丢失;



3.适配器

定义一个包装类,用于包装不兼容接口的对象。

把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。

原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

优点

更好的复用性

系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。

透明、简单

客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单 & 更直接更好的扩展性

在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。

解耦性

将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码。

符合开放-关闭原则

同一个适配器可以把适配者类和它的子类都适配到目标接口;可以为不同的目标接口实现不同的适配器,而不需要修改待适配类。

缺点

过多的使用适配器,会让系统非常零乱,不易整体进行把握。



4.模板方法

模板方法封装了一个固定流程,该流程由几个步骤组成,具体步骤可以由子类进行不同实现,从而让固定的流程产生不同的结果。

本质:抽象封装流程,具体进行实现。

优点

封装不变,扩展可变:父类封装了具体流程以及实现部分不变行为,其它可变行为交由子类进行具体实现;

流程由父类控制,子类进行实现:框架流程由父类限定,子类无法更改;子类可以针对流程某些步骤进行具体实现。

缺点

抽象规定了行为,具体负责实现,与通常事物的行为相反,会带来理解上的困难(通俗地说,“父类调用了子类方法”)。



5.策略模式

定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

上下文和具体策略是松耦合关系。因此上下文只知道它要使用某一个实现Strategy接口类的实例,但不需要知道具体是哪一个类。

策略模式满足“开-闭原则”。当增加新的具体策略时,不需要修改上下文类的代码,上下文就可以引用

新的具体策略的实例。



6.组合模式

将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

组合模式主要有安全性实现和透明性实现。

定义了包含基本对象和组合对象的类层次结构

在组合模式中,基本对象可以被组合成更复杂的组合对象,而组合对象又可以组合成更复杂的组合对象,可以不断地递归组合下去,从而构成一个统一的组合对象的类层次结构。

统一了组合对象和叶子对象

在组合模式中,可以把叶子对象当作特殊的组合对象看待,为它们定义统一的父类,从而把组合对象和叶子对象的行为统一起来。

简化了客户端调用

组合模式通过统一组合对象和叶子对象,使得客户端在使用它们的时候,就不需要再去区分它们,客户不关心使用的到底是什么类型的对象,这就大大简化了客户端的使用。

更容易扩展

由于客户端是统一的面对Component来操作,因此,新定义的Composite或Leaf子类能够很容易的与已有的结构一起工作,而客户端不需要为增添了新的组件类而改变。

很难限制组合中的组件类型

容易增加新的组件也会带来一些问题,比如很难限制组合中的组件类型。这在需要检测组件类型的时候,使得我们不能依靠编译期的类型约束来完成,必须在运行期间动态检测。



7.依赖反转 

IOC模式是把依赖倒置原则这种思想进一步贯彻和实现。一般的程序实现,两个模块之间可以是高度耦合的。引入IOC容器管理和实例化接口对象,在IOC容器中把实例化的B对象注入模块A中

       这里我们可以看到,模块A依赖与外部容器(IOC容器)实例化并注入它所需要的外部资源,而所谓的控制反转与依赖注入则是对同一概念不同角度的理解;控制反转意味着原来应该由模块A主动实例化对象,改由IOC容器去实现,控制权由原来的A模块变为了容器,从而达到了A模块与B模块之间的解耦;依赖注入则是对于模块A来讲,它需要依赖于IOC容器创建它需要的对象,并注入到自身当中;

      对IOC更多的是需要从思想层面上去理解,控制权的反转的目的是要达到模块间的解耦,模块之间是感受不到对方存在的,对象的创建、生命周期的管理全都有IOC容器来管理,上层模块调用底层模块时,需要依靠IOC容器创建并注入。



8.MVC

MVC即Model、View、Controller即模型、视图、控制器。

MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性。



用户头像

jingx

关注

还未添加个人签名 2018.09.07 加入

还未添加个人简介

评论

发布
暂无评论
第三周作业-学习总结