1.
外观模式定义:
为子系统中的一组接口提供一个一致的的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
Façade类的形式:
Façade接口的形式:
Façade可以和单例模式,抽象工厂模式组合使用。
1. 适配器模式:
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
对象适配器类图:
双向适配器类图:
类适配器类图:
适配器通过转换调用已有的实现,从而能把已有的实现匹配成需要的接口,使之能满足客户端的需要。
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
生成器类图:
生成器模式和模板方法模式:
模板方法模式这要是用来定义算法的骨架,把算法中的某些步骤延迟到子类中实现。
生成器模式Director用来定义整体的构建算法(很像是模板方法里的抽象类,定义了各个部件组成顺序或算法结构),把算法中某些涉及到具体部件对象的创建和装配的功能,委托给具体的Builder来实现。
虽然生成器不是延迟到子类,是委托给Builder,但那只是具体实现方式上的差别,从实质上看两个模式很类似,都是定义一个固定的算法骨架,然后把算法中的某些具体步骤交给其他类来完成,都能实现整体算法步骤和某些具体步骤实现的分离。
区别:
首先是模式的目的,生成器模式是用来构建复杂对象的,而模板方法是用来定义算法骨架,尤其是一些复杂的业务功能的处理算法的骨架;
其次是模式的实现,生成器模式是采用委托的方法,而模板方法采用的是继承的方式,另外从使用的复杂度上,生成器模式需要组合Director和Builder对象,然后才能开始构建,要等构建完后才能获得最终的对象,而模板方法就没有这么麻烦,之间使用子类对象即可。
1. 模板模式:
定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
类图:
组装XML例子:
可以看到抽象类里会定义一个buliderXML方法,该方法定义构建对象的步骤与顺序。
XMlBulider继承了抽象类实现对象的组成各个部件实现。
为什么用抽象类而不用接口呢?
通常在“既要约束子类的行为,又要为子类提供公共功能”的时候使用抽象类。
按照这个原则使用抽象类。
1. Java回调和模板方法
还是组装XMl例子先看看类图
这里可以看到Xmlbulider类并没有实现callbackBuilder接口,并且,Xmlbulider也不是抽象类。
callbackBuilder接口中必须把所有可以被扩展的方法都要定义出来。
然后可以看到Xmlbulider类中的模板方法buliderXML传入回调接口。
在模板方法实现中,除了在模板中固定的实现外,所有可以被扩展的方法,都应该通过回调接口进行调用。
再看看client端实现代码:
public class client { public static void main(String[] args) { ExportHenderModel ehm=new ExportHenderModel(); ehm.setDeptId("001"); ehm.setExportdate("2013-11-8"); Map<String, Collection<ExportDataModel>> mapdata=new HashMap<String, Collection<ExportDataModel>>(); List<ExportDataModel> ilist=new ArrayList<ExportDataModel>(); ExportDataModel edm=new ExportDataModel(); edm.setProudctId("0011"); edm.setAmount(11); edm.setPrice(22); ilist.add(edm); mapdata.put("liwenjun", ilist); ExportFooterModel efm=new ExportFooterModel(); efm.setExportUser("liwenjun"); Xmlbulider xmlbulider=new Xmlbulider(); String xml= xmlbulider.buliderXML(ehm, mapdata, efm, new callbackBuilder(){ @Override public void builerHender(ExportHenderModel ehm,StringBuffer buffer) { // TODO Auto-generated method stub buffer.append(" <Hender>\n"); buffer.append(" <DeptId>" +ehm.getDeptId()+"</DeptId>\n"); buffer.append(" <Exportdate>" +ehm.getExportdate()+"</Exportdate>\n"); buffer.append(" </Hender>\n"); } @Override public void builerBody( Map<String, Collection<ExportDataModel>> mapdata,StringBuffer buffer) { // TODO Auto-generated method stub buffer.append(" <Body>\n"); for(String talname:mapdata.keySet()){ buffer.append( " <Datas TableName=\""+talname+"\">\n"); for(ExportDataModel edm:mapdata.get(talname)){ buffer.append(" <Data>\n"); buffer.append(" <ProudctId>" +edm.getProudctId()+"</ProudctId>\n"); buffer.append(" <Price>" +edm.getPrice()+"</Price>\n"); buffer.append(" <Amount>" +edm.getAmount()+"</Amount>\n"); buffer.append(" </Data>\n"); } buffer.append(" </Datas>\n"); } buffer.append(" </Body>\n"); } @Override public void builderFooter(ExportFooterModel efm,StringBuffer buffer) { // TODO Auto-generated method stub buffer.append(" <Footer>\n"); buffer.append(" <ExportUser>" +efm.getExportUser()+"</ExportUser>\n"); buffer.append(" </Footer>\n"); buffer.append(" </Report>\n"); } }); System.out.print(xml); } }
总结一下两种模板方法的实现方式:
使用继承方式,抽象方法和具体的关系是在编译期间静态决定的,是类级的关系。
使用java回调,这个关系是在运行期间动态决定的,是对象级的关系。
使用回调机制会更灵活,因为java是单继承的。
而使用回调,是基于接口的。
继承方式会更简单一些,因为父类提供了实现的方法,子类如果不想扩展,那就不用管。
如果使用回调机制,回调的接口需要把所有可能被扩展的方法都定义进去,这就导致实现的时候,不管你要不要扩展,都要实现这个方法。
相关推荐
面向对象设计模式类图和总结 面向对象设计模式是软件设计中的一种重要思想,它提供了一种灵活、可维护、可扩展的软件设计方法。以下是十个基本的设计模式的总结和类图: 一、策略模式 定义:定义了一个算法家族,...
UML(统一建模语言)是一种标准的图形化建模语言,主要用于软件的分析和设计,通过定义完善的符号来图形化展示软件系统。...掌握UML类图和各种设计模式之间的关系,对于理解和应用设计模式至关重要。
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结和最佳实践。这23种设计模式被广泛应用于构建可维护、可扩展和可复用的软件系统。每一种模式都提供了在面向对象设计中处理特定问题...
下面是关于设计模式和UML类图的知识点总结: 一、设计模式概述 设计模式是一种通用的解决方案,它提供了一种通用的解决方案来解决软件设计中常见的问题。设计模式是一种已经被验证的解决方案,可以重复使用,以...
在探讨《JAVA设计模式类图(免费高清)》这一资源时,我们首先需要明确几个核心概念:设计模式、UML图以及它们在Java开发中的应用。该资源通过一系列高清图表,详细介绍了23种常见的Java设计模式,为开发者提供了一...
本压缩包文件包含了《设计模式之禅(第2版)》中的23种经典设计模式的类图,通过这些类图,我们可以更直观地理解和掌握这些模式的核心思想。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在C#中,...
本系统基于六种设计模式,运用到的设计模式有备忘录模式,...设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式是软件工程中的宝贵经验总结,它们是针对常见问题的可重用解决方案。UML(统一建模语言)则是用来可视化这些设计模式的强大工具,它通过类图、对象图、序列图等方式帮助我们理解和表达系统的设计。在这个...
在这个主题中,我们将详细探讨设计模式及其对应的UML类图。 UML(统一建模语言)是一种图形化表示法,用于描述软件系统的设计和结构。类图是UML中的一种静态视图,它显示了类、接口以及它们之间的关系,如继承、...
设计模式是软件工程中的一种最佳实践...总结来说,这个项目涵盖了设计模式的核心概念,使用C++语言和EA工具进行了全面的实现和测试,提供了对软件开发中常见问题的解决方案,增强了代码的可读性、可维护性和可扩展性。
设计模式是软件工程中用于解决常见问题的通用解决方案模板,它们可以被应用于特定的设计...文档中列出的设计模式类图总结,为软件开发者提供了一个快速参考的资源,便于在设计和编程中应用这些模式,从而提升软件质量。
### 二十三种设计模式UML类图——深入解析与重构成本分析 #### 一、引言 在软件工程领域,设计模式被视为一种优化代码结构、提高代码复用性和维护性的有效手段。与此同时,重构技术作为一种重要的代码改进方法,...
在IT行业中,设计模式是一种被广泛认可的...设计模式是软件工程中的宝贵财富,它们不仅仅是代码实现,更是解决特定问题的经验总结。通过学习和实践这些设计模式,开发者能够编写出更灵活、可维护和易于扩展的Java代码。
在软件开发过程中,设计模式是经验的总结,是解决常见问题的最佳实践。"Head First 设计模式"是一本广受欢迎的书籍,它以易于理解的方式介绍了多种设计模式。本篇文章将聚焦于书中第34页关于类图的Java实现,讨论...
软件设计模式大作业 本资源为一份完整的软件设计模式大作业,涵盖了六种设计模式的应用,分别是简单工厂模式、工厂方法模式、单例模式、门面模式、策略模式和观察者模式。该大作业的主要内容包括系统流程、系统类图...
《Java设计模式》课程设计报告主要探讨了如何利用Java编程语言和MyEclipse集成开发环境来实现基于设计模式的西瓜市场系统。这个项目涵盖了四种重要的设计模式:单例模式、代理模式、建造者模式和抽象工厂模式,为...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可读性、可维护性和复用性。本资源包含了Java的23种经典设计模式的源码和案例分析,对于Java开发者,尤其是初学者来说...
该资源涵盖了软件设计模式的基础知识,包括软件设计模式的概述、UML中的类图、面向对象的设计原则、单例模式、原型模式等。 软件设计模式概述 软件设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码...
设计模式是软件工程中的一种重要思想,它是在特定情境下解决问题的经验总结,是解决常见问题的最佳实践。...绘图1.vsd可能是用于描绘设计模式的UML类图或其他图表,它能直观地展示各对象之间的关系和交互。
23种设计模式总结,分别对应三种大的类型:创建型模式、结构型模式、行为型模式。包含其定义和类图。 速记口诀如下: 创建型:单抽元建厂 结构型:外侨(桥)组元戴(代)配饰 行为型:责令解放(访),观摩(模)对...