上午:适配器模式和外观模式的所有内容,适配器模式针对一个对象,外观模式针对一群对象
适配器:将一个对象包装,改变其接口(如充电头转换器,或实现鸭子类,改变其接口为火鸡的实现方式)
装饰者:将一个对象包装,增加新的行为和责任(如实现咖啡类,增加调料西米露、红豆)
外观模式:将一群对象包装,简化接口(类似命令模式的宏命令,一键操作)
下午:模板方法模式,定义算法的骨架,将实现延迟到子类
页数/内容 | 收获 |
235-242适配器模式 时间:9.10-9.25 时长:15min | 需求:实现一个适配器 ①定义一个适配器类 ②实现想转换成的类型的接口 ③利用构造器取得要适配的对象的引用,将其当做参数传进去 ④实现②中接口的方法,方法体使用的是适配的对象里的方法 |
243-256适配器模式 时间:9.44-9.54 时长:10分钟 | 1、适配器模式定义:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 作用:让客户从实现的接口解耦,如果在一段时间之后需要改变接口,适配器可以将改变的部分封装起来,客户就不必为了应对不同的接口而每次跟着修改
|
257-274外观模式 时间:10.20-10.45 时长:25分钟 | ①外观模式不只是简化了接口,也将客户从组件的子系统中解耦。 ②外观和适配器可以包装许多类,但是外观的意图是简化接口(类似命令模式的宏命令?),适配器的意图是将接口转换成不同接口
外观模式定义:提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 设计原则--最少知识原则 优点:只和你的密友谈话,意思:在设计中,不要让太多的类耦合在一起,免得修改系统的一部分,就影响其他部分。如果许多类之间相互依赖,那么这个系统就会变成一个易碎的系统,它需要花许多成本维护,也会因为太复杂而不容易被其他人了解 缺点:虽然减少了软件的维护成本,但是采用这个原则也会导致更多的“包装”类被制造出来,以处理和其他组件的沟通,这可能会导致复杂度和开发时间的增加,并降低运行时的性能
技术要点 1、当需要使用一个现有的类而其接口不符合需要时,就使用适配器 2、当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观模式 3、适配器改变接口以符合客户的期望 4、外观模式将客户从一个复杂的子系统中解耦(如一键看电视,不需要关注子系统的开屏幕、开音量、调频道) 5、实现适配器的复杂度由目标接口的大小而决定 6、实现外观模式需要将子系统组合进外观中,然后将工作委托给子系统执行 7、适配器有两种形式:类适配器、对象适配器。类适配器需要多继承(Java不允许) 8、可以为一个子系统设计一个或者多个外观模式 9、适配器:将一个对象包装,改变其接口(如充电头转换器) 装饰者:将一个对象包装,增加新的行为和责任(如实现咖啡类,增加调料西米露、红豆) 外观模式:将一群对象包装,简化接口(类似命令模式的宏命令,一键操作 |
页数/内容 | 收获 |
275-295模板方法模式 时间:2.50-3.05 时长:15min | 模板方法模式定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结果的情况下,重新定义算法中的某些步骤。简单说模板就是一个方法,它将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。
在模板方法里面也可以提供钩子。钩子是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在可以让子类有能力对算法的不同点进行挂钩。要不要挂钩由子类决定。钩子也可以提供条件控制或者对抽象类作出一些改变。
子类必须实现抽象类中的所有方法。
例子:泡茶和泡咖啡
|
296-313模板方法模式 时间:3.30-3.50 时长:20min | 好莱坞原则:允许低层(子类)组件将自己挂钩到系统上,但是高层(基类)组件会决定什么时候和怎样使用这些低层组件。即低层不要调用高层,高层调用低层。由超类主导一切,当它们需要的时候自然会去调用子类。工厂模式、观察者模式、模板方法模式都用了这个原则。
模板方法:子类决定如何实现算法中的步骤(可以用于创建框架,由框架控制如何做事情,而用户指定框架算法中每个步骤的细节) 策略:封装可互换的行为,然后使用委托来决定要采用哪一个行为 工厂方法:由子类决定实例化哪个具体类
策略模式:定义一个算法家族,并让这些算法可以互换。因为每一个算法都被封装起来了,所以客户可以轻易使用不同的算法(如鸭子会不会飞,会不会叫) 模板方法模式:定义一个算法的大纲,由子类定义其中某些步骤的内容。模板方法在算法中的个别步骤可以有不同的实现细节,但是算法的结构依然维持不变
要点 1、模板方法定义了算法的步骤,把这些步骤的实现延迟到了子类 2、模板方法模式为我们提供了一种代码复用的重要技巧 3、模板方法的抽象类可以定义具体方法、抽象方法和钩子 4、抽象方法由子类实现,子类要实现抽象类的所有方法 5、钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它 6、为了防止子类改变模板方法中的算法,可以将模板方法声明为final 7、好莱坞原则:超类主导一切,决定何时如何调用子类 8、策略模式和模板方法模式都封装算法,策略用组合,模板用继承的方式 9、工厂方法是模板方法的一种特殊版本 |