zoukankan      html  css  js  c++  java
  • 大话设计模式读后总结(一)

    简单工厂模式:定义一个抽象产品接口和具体工厂类,用该来完成创建实例的过程;

    工厂类中包含了必要的逻辑判断,根据调用者的选择动态实例化相关类的对象,去除了调用者和具体产品的依赖;

    不足:违背了开放封闭原则:改变时要更改工厂类中代码;

    升级版:

    工厂方法模式:定义一个抽象产品接口+一个抽象工厂接口,将具体产品的实例化延迟到实现其子类,让子类选择决定;

    好处:满足开放封闭原则:改变时,不需要改原工厂方法的代码,只要添加一个具体工厂即可;

    不足:但将简单工厂的内部逻辑判断移到了调用者中,因此改变时要修改调用者端的代码;

    抽象工厂模式:创建一组抽象产品接口,

    好处:易于交换产品系列,只要改变一个具体工厂,即可使用不同的产品配置;

    不足:增加功能时,对代码增加和改动都很大;

    升级版:用简单工厂来改进抽象工厂

    升级版:再引入“配置文件(存储字符串变量)+反射机制(可以用字符串变量来动态创建对象)”解决简单工厂中   要用逻辑判断将工厂类中代码写死弊端 ;  这样一来,完美!!

    策略模式: 抽象算法,减少同使用算法者的耦合;

       定义了算法家族(工作相同,实现不同),用接口/抽象类封装,减少同使用算法者的耦合;

        缺点:变化时,需要在客户端来改代码;可以采用简单“工厂模式+策略模式”来解决这一问题;

    装饰模式:为对象动态的添加职责,比生成子类更为灵活;

       装饰者抽象类实现了抽象对象接口 并 持有抽象对象接口的引用,采用显式聚合方式:setCompent(抽象对象)来获取具体对象的引用, 在此基础上扩展其功能; 

      灵活看待:只有一个具体对象时,没必要有抽象接口,可以令装饰者抽象类是具体对象类的子类来实现其功能;当然,若只有一个装饰者类时,也没必要有装饰者抽象类;

    代理模式:为对象提供代理对象,以控制对真实对象的访问;

          代理类实现了抽象对象接口 并 持有真实对象的引用,采用隐式聚合方式:request(){new 真实对象}来获取真实对象的引用,称为其代理;

          适用场合:远程代理,虚拟代理,安全代理,智能指引;

    原型模式:指定原型对象,通过拷贝机制来创建新的对象;即:用对象去创建对象

     对象中存在引用类型成员属性时:  浅复制(只复制引用,不复制对象;原对象与其副本引用同一属性对象) 与 深复制(只复制引用,也复制对象,原对象与其副本引用不同属性对象)

    模版方法模式:定义一个操作骨架,将一些步骤延迟到子类去实现;

       将不变的行为搬移到超类,去除子类中的重复代码,可实现代码复用;

    外观模式(门面模式):为子系统的一组接口提供一个一致的界面,即:一个高层接口,使得更加容易使用;

      适用场合:设计是令层与层的降低耦合;开发时减少子系统间的依赖;维护遗留系统时,同新系统交互;

    建造者模式:将对象的构建和表示分离,使得同样的构建过程可以创建不同的表示;而建造过程和细节,使用者不需知道;

     适用场合:当前创建对象的方法,独立于 对象的组成部分和装配方式时;用于创建复杂对象:其内部建造顺序稳定但每一步通常面临着复杂的变化;  

    观察者模式(发布订阅模式):定义一对多的依赖关系,当主题对象发生变化时,观察对象也会随之变化;  是依赖倒置的最佳体现;

      使用场合:当一个对象的改变,不知道要影响多少具体对象改变时;

    不足:当使用他人写好的控件时,无法实现自定义的观察者抽象接口,而且不管每个具体观察者的行为如何,方法名还必须相同才行;

    升级版:

    事件委托机制:不需要实现同一接口,去除了抽象观察接口,让各个观察者的方法名可以不同; 例如:事件监听 

    注:委托是一种引用方法的类型,是对方法的抽象,委托实例就是一个具体的方法;

    前提:委托中方法要拥有相同的参数和返回值类型;

  • 相关阅读:
    Java 发送http请求(get、post)
    java 压缩成zip文件、解压zip文件(可设置密码)
    bootstrap日历控件datetimepicker基本用法
    js/java 获取、添加、修改、删除cookie(最全)
    阿里云centos中mysql的安装及一些常识知识
    HDOJ 4869 Turn the pokers
    J2ee高并发情况下监听器
    硬盘杀手!Windows版Redis疯狂占用C盘空间!
    指针数组、数组指针、函数指针、指针函数总结
    STM32学习笔记之EXTI(外部中断)
  • 原文地址:https://www.cnblogs.com/zhaojinxin/p/7106192.html
Copyright © 2011-2022 走看看