• 《大话设计模式》的一些总结


    厌倦了零零散散的文章分布,书评写到豆瓣、技术写到网易什么的,这样自己很容易遗忘,懒得去回顾,慢慢得就懒得去思考和动笔了,所以我决定在此再加一个书评分类,以后看了书往这里写总结,虽然这个分类开得有点晚了,不过我觉得还是有用的,对将来的回顾知识点并且能对自己掌握的知识能有直观的了解。大数据能比自己更了解自己,那我觉得笔记也应该能让自己更清楚自己。

    OK,不再废话。这本书其实早就看过了,可是一直看得漫不尽心,为了加深对面向对象思想的理解,提高自己编写代码的质量,我花了大概一周的时间下了本电子书将其看完,提高还是有一点的,我在下面就将各模式进行一个自我描述式的总结,自己的理解,欢迎指正。

    一、创建型模式

    最终都落实到客户端的创建对象问题。

    1、简单工厂模式

    根据需求,创建对应的实例,例如男人和女人两类,那么工厂就是根据传入的参数创建真正的男人或女人。

    如:factory.create("男");

    2、抽象工厂

    抽象的工厂,也就是并非真实的工厂(只是一个接口),大家根据这个抽象工厂模板(拥有工厂所需要做的方法)能打造出自己的工厂,并通过自己的工厂产生对应实例。

    3、建造者模式

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

    4、工厂方法

    让子类决定实例化哪一个类。

    5、原型方法

    通过拷贝原型创建新的对象。这里就涉及到深浅拷贝。深拷贝,内部引用会分配新的空间,浅拷贝内部引用的东西还是指向原来的。

    6、单例模式

    保证一个类只有一个实例,并提供访问他的一个全局访问点。

    二、结构型模式

    为了使得耦合度更低,之间的关联更少,增加需求时更加合理。

    1、适配器模式

    他能将一个类的接口转换成客户端希望的另一种接口,使得接口不兼容的那些类可以一起工作。

    例如:ADO.NET在操作数据时,为了保证拿到的时候数据格式相同,用了DataAdapter将无论是Mysql或Sqlserver等的数据都fill到DataSet去。

    2、桥接模式

    合成聚合复用原则的一个体现。例如手机品牌和手机软件,每个品牌有多个手机软件,但软件就不分品牌。把他们分开,发挥自己的功能,不要使用继承。

    3、组合模式

    要使用整体与部分关系的时候,或者树形结构的使用该模式,例如一个部门的管理。

    4、装饰模式

    可以在客户端给对象动态的添加功能。就像穿衣服一样,可以一件件的往上加。

    5、外观模式

    为子系统的接口提供一个一致的界面。这是一个顶层的接口,若要跟新系统交互,就可以通过这个接口。

    6、享元模式(flyweight)

    为了共享一些实例,例如围棋就黑白两种,每个棋子都创建对象太费空间,他就能利用模式优势共享一些共同属性。

    7、代理模式

    为其他对象提供一个代理从而控制对象的访问。与外观模式的是,他只代理其中一个对象,而不是一个系统,所以他也没有那么的复杂。

    三、行为型模式

    1、观察者模式

    观察者本身是一个类,但他只要实例一个就能接别人各种类对象的活(一对多),例如让他监听某个对象的变化,一旦变化,让他干活的人都会接到通知。

    例如:在C#中就是委托和事件,一个委托可以做别人交给他的任何事情,也就是别的对象使用的方法交给他就能执行了。

    2、模板方法

    定义算法骨架,由子类去完善或更改他的细节。

    例子:选择题的题目都相同,答题者只是答案不同,所以给个answer()接口,子类去实现就行了。

    3、命令模式

    将一个请求封装为一个对象,从而可以对不同请求进行参数化。支持撤销。

    4、状态模式

    5、职责链模式

    将对象串成一个链,一直传递到能处理该事件的人。

    例如:作用在于传递,申请加薪,经理没权利就给总监,总监也没权利,那就给总经理。

     6、解释器模式

    7、访问者模式

    将算法与数据结构分开,这样系统有稳定的框架,并能改变和增加算法。

    8、中介者模式

    有点类似于群发的意思。

    9、策略模式

    将算法分别封装起来,并集成来自一个叫策略的类,那么算法就独立于客户端了,只要操作策略类即可了。

    10、备忘录模式

    可以不暴露细节。以游戏举例,当要保存存档时,就是说即便你不知道要保存的是生命力,攻击力,防御力,只要保存就都能保存上了。读取时直接就读出来。

    11、迭代器模式

    分离了集合对象的遍历行为,抽象出一个迭代器来负责,可以让外部代码访问内部对象但又不暴露内部结构。

    还有些东西需要再思考一下。

  • 相关阅读:
    Android绘制文本对象FontMetrics介绍及繪製文本 (转)
    实机调试无法输出LogCat的解决办法
    android 获取 imei号码 和 获取手机型号和系统版本号(未验证)
    Android原理之动态墙纸 (转)
    wp7 中的des 加解密
    ViewPager多页面滑动切换以及动画效果 (转载)
    中央气象台的天气预报API 中国城市数据库
    SQLite日期类型
    JDK1.5及API完整中文版CHM下载地址
    myeclipse8.5注册码生成
  • 原文地址:https://www.cnblogs.com/fafaly/p/3931610.html
Copyright © 2020-2023  润新知