1.适配器(Adapter)模式部分
*OO适配器和真实世界的适配器扮演者同样的角色:将一个接口转换成另一个接口,以符合客户的期望。
*适配器(Adapter)类看起来很像命令(Command)模式中命令接口的实现类,只不过它不被作为参数传递。
----DuckAdapter类----
public class DuckAdapter implements Turkey {
private Duck duck;
public DuckAdapter(Duck duck) {
this.duck = duck;
}
public void goggle() {
duck.quack();
}
public void fly() {
duck.fly();
}
}
------------
适配器模式:将一个类的接口,转换成客户希望的另一个接口。适配器让原本接口不兼容的类合作无间。
*适配器模式可以让客户从实现的接口解耦。
*适配器(Adapter)模式充满着良好的OO设计原则:使用对象组合,以修改的接口包装被适配者;这种做法还有额外的优点,那就是被适配者的任何子类都可以搭配着适配器使用。
*适配器(Adapter)分为“对象(Object)”适配器和“类(Class)”适配器两种。
*在类适配器中,适配器继承了目标(Target)和被适配者(Adaptee);而对象适配器中,适配器利用组合的方式将请求传送给被适配者。
*类适配器是基于多重继承实现的,因为Java不支持多重继承,因此无法做到。
*由于类适配器使用了继承的方式,所以它的优点是不需要整个实现被适配者,必要的时候还可以覆盖被适配者的行为。
----练习。解答----
public class ArrayListEnumeration implements Enumeration {
private ArrayList list;
public ArrayListEnumeration(ArrayList al) {
this.list = al;
}
public boolean hasMoreElements() {
return list.iterator().hasNext();
}
public Object nextElement() {
return list.iterator().next();
}
}
------------
引用
*装饰者(Decorator)模式与适配器(Adapter)模式的区别
(1)装饰者模式与“责任”相关,当涉及到装饰者时,就表示有一些新的行为或责任要加到设计中。
(2)适配器允许客户使用新的库和子集合,无须改变“任何”已存在的代码,由适配器负责转换即可。
(3)装饰者不会改变接口,而适配器会改变接口。
(4)装饰者的工作是扩展被包装对象的行为或责任,并不是“简单传递”就算了。
(5)装饰者(Decorator)模式与适配器(Adapter)模式的最大不同在于使用它们的意图(或目的)。
----连连看解答----
装饰者(Decorator)模式->不改变接口,但加入责任
适配器(Adapter)模式->将一个接口转换成另一个接口
外观(Facade)模式->让接口更简单
------------
2.外观(Facade)模式部分
*外观模式在简化接口的同时,依然将系统完整的功能暴露出来,一共需要的人使用。
*外观模式不仅简化了接口,也将客户从组件的子系统中解耦。
*适配器(Adapter)模式和外观(Facade)模式都可以包装多个类,前者的目的是将接口重新组织后提供新接口,后者的目的是简化接口。由于它们的差异很细微,所以两者常常同时出现。
外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。
软件设计原则:要减少对象之间的交互,只留下几个“密友”。这个原则被成为“最少知识(Least Knowledge)原则”,它告诉我们只和自己的密友谈话。
*最少知识(Least Knowledge)原则告诉我们,不要让太多的类耦合在一起,免得修改系统的一部分,会影响到其它部分。如果许多类之间互相依赖,那么这个系统就是一个易碎的系统,需要花许多成本维护,也会因为太复杂而不容易被他人理解。
引用
*通过只调用以下几种范围内的方法可以做到尽量遵循“最少知识原则”:
(1)该对象本身
(2)被当做方法的参数而传递进来的对象
(3)此方法所创建或实例化的任何对象
(4)对象的任何组件,比如类或对象本身的变量,或常量
*最少知识原则的不同名称:(Principal of) Least Knowledge,(The) Law of Demeter,迪米特法则,得墨忒耳法则
*使用最少知识原则的缺点是:更多的“包装类”被创造出来,以处理和其它组件的沟通。这可能导致复杂度和开发时间的增加,并减低运行时的性能。
引用
----Sharpen Your Pencil----
第一个House类违反了“最少知识原则”,第二个House类则没有。
------------
3.适配器(Adapter)模式和外观(Facade)模式小结
*当需要使用一个现有的类,而其接口并不符合你的需要时,就使用适配器。
*当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观。
*适配器改变接口以符合客户的期望。
*外观将客户从一个复杂的子系统中解耦。
*实现一个适配器所要花费的工作量取决于目标接口的大小及复杂程度。
*实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行。
*适配器有两种形式:对象适配器和类适配器。类适配器需要用到多重继承。
*可以为一个子系统实现一个以上的外观。
*适配器(Adapter)将一个对象包装起来以改变其接口;装饰者(Decorator)将一个对象包装起来以增加新的行为和责任;而外观(Facade)将一群对象包装起来以简化其接口。
4.适配器(Adapter)模式实例
// 让所有List支持枚举
public class ListEnumeration implements Enumeration {
private List list;
public ListEnumeration(List al) {
this.list = al;
}
public boolean hasMoreElements() {
return list.iterator().hasNext();
}
public Object nextElement() {
return list.iterator().next();
}
}
5.外观(Facade)模式实例
// 车锁
public class CarLock {
public void lock() {
System.out.println("Car is locked.");
}
public void unlock() {
System.out.println("Car is unlock.");
}
}
// 发动机
public class Engine {
public void start() {
System.out.println("Engine is started.");
}
public void stop() {
System.out.println("Engine is stopped.");
}
}
// 汽车外观类
public class CarFacade {
private CarLock lock;
private Engine engine;
public CarFacade(CarLock lock, Engine engine) {
this.lock = lock;
this.engine = engine;
}
public void startCar() {
this.lock.unlock();
this.engine.start();
}
public void stopCar() {
this.engine.stop();
this.lock.lock();
}
}
--END--
分享到:
相关推荐
笔记_HeadFirst设计模式
### Head.First 设计模式学习笔记知识点总结 #### 一、设计模式概述 设计模式是一种用于解决软件设计中常见问题的标准化方法。通过采用设计模式,开发者可以提高代码的复用性、灵活性和可维护性。《Head First 设计...
《HeadFirst设计模式学习笔记》是一份详尽的资料,旨在帮助读者深入理解并掌握设计模式这一编程领域的核心概念。设计模式是软件工程中的一种最佳实践,它在解决常见问题时提供了一种标准的解决方案,使得代码更易于...
通过上述对Head First设计模式学习笔记的解析,我们可以看到每种模式都在特定场景下发挥了重要作用,帮助开发者更好地组织代码,提高程序的可扩展性和可维护性。在实际项目中灵活运用这些设计模式,可以有效提升软件...
《HeadFirst设计模式学习笔记1--策略模式Demo》 在软件工程中,设计模式是一种解决常见问题的标准方案,它提供了一种在特定情况下组织代码的模板。策略模式是设计模式中的一种行为模式,它允许在运行时选择算法或...
在“HeadFirst 设计模式学习笔记3--装饰模式 Demo”中,作者通过实例讲解了装饰模式的基本概念、结构和应用场景。这篇文章可能是从CSDN博客平台上的一个链接访问的,遗憾的是,由于我们当前无法直接访问该链接,所以...
HeadFirst设计模式 读书 笔记
总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...
读书笔记:设计模式学习笔记和代码。《图解设计模式》《Head First 设计模式》
《Head First 设计模式》是软件开发领域内一本广受欢迎的书籍,由Eric Freeman、Elisabeth Robson、Bert Bates和Kathy Sierra四位作者共同撰写。这本书以其独特的视觉风格和易于理解的教学方法,深入浅出地介绍了...
《Head First设计模式》是一本深受开发者喜爱的设计模式学习书籍,它以易懂且生动的方式介绍了23种经典设计模式。这些模式是软件工程中经过实践验证的最佳实践,旨在提高代码的可重用性、可读性和可维护性。下面,...
《HeadFirst设计模式笔记》是深入理解软件设计思想的一份宝贵资料,主要涵盖了设计模式这一核心编程概念。设计模式是经过实践验证的解决方案模板,用于解决在软件开发中经常遇到的问题,尤其在面向对象设计中。这篇...
在《Head First 设计模式学习笔记(十四)模式的组合使用》中,作者探讨了如何在实际编程中灵活地组合多种设计模式以解决复杂问题。这篇文章可能是基于《Head First 设计模式》这本书的一个章节,该书是设计模式领域...
《Head First设计模式》是软件开发领域的一本经典著作,其深入浅出地介绍了23种设计模式。第一章主要讲解的是策略模式,这是一种行为设计模式,它使你能在运行时改变对象的行为。策略模式的核心思想是定义一系列算法...
本项目为《Head First 设计模式》的Java语言学习笔记与实战练习源码集合,包含104个文件,主要包括88个Java源文件、12个Markdown文档、3个XML配置文件及少量其他辅助文件。内容涵盖设计模式的学习笔记以及相应的代码...
著名的《Head First Design ...由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理摘录,部分内容来自书本,仅供学习使用。
根据提供的信息,“Head First设计模式”是一本广受好评的设计模式书籍。虽然具体的章节内容没有给出,但从描述中得知本书的第22页至39页涵盖了重要的设计模式概念,因此我们将围绕这些页面可能涉及的设计模式进行...
以上只是《Head First Servlets & JSP》一书中的部分核心知识点,实际内容还包括过滤器、监听器、MVC设计模式、JSTL等更广泛的主题,旨在帮助读者全面理解和掌握Servlet和JSP技术。通过深入学习,开发者能够构建高效...
【Servlet&JSP基础知识】 ...以上是`head_first_servlet&jsp`学习笔记的主要知识点,涵盖了Servlet和JSP的基础、Web应用架构、MVC模式、会话管理和JSP编程等多个方面,为深入理解和实践Servlet与JSP开发奠定了基础。