文档详情

《Java高级程序设计》课件——学习情境9 建造者模式与抽象工厂模式.pptx

发布:2025-03-05约6.27千字共107页下载文档
文本预览下载声明

;一、应用场景

二、建造者设计模式

三、建造者设计模式的结构

四、建造者设计模式的实现过程;3;以上所有这些产品都是由多个部件构成的,各个部件可以灵活选择,但其创建步骤都大同小异。这类产品的创建无法用工厂模式描述,只有建造者模式可以很好地描述该类产品的创建。;二、建造者设计模式;2.建造者模式的适用场合;三、建造者设计模式的结构;2.建造者设计模式主要角色;3.具体建造者(ConcreteBuilder):实现Builder接口,完成复杂产品的各个部件的具体创建方法。

4.指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。;建造者模式包含两个很重要的部分:

(1)一个部分是Builder接口,这里是定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何装配这些部件到产品中去;

(2)另外一个部分是Director,Director是指导如何组合来构建产品,也就是说Director负责整体的构建算法,而且通常是分步骤地来执行。;四、建造者设计模式的实现过程;2.建造者设计模式的实现过程;第一步,定义产品类;由一系列部件组成,一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。;第二步,定义抽象建造者类;给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的两种方法:一种是建造方法(buildPart),另一种是返还结果方法(getResult)。;第三步,定义具体建造者类;第四步,定义指挥者类(或称导演者类);指挥者类(或称导演者类)负责调用适当的建造者来组建产品,指挥者类一般不与产品类发生依赖关系,与指挥者类直接交互的是建造者类。指挥者者角色并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色。;privateBuilderbuilder;

//1构造方法的方式注入builder对象

publicDirector(Builderbuilder)

{

this.builder=builder;

}

//2set方法注入builder对象

publicvoidsetBuilder(Builderbuilder)

{

this.builder=builer;

};指挥者角色是与客户端打交道的角色。指挥者将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的;publicProductconstruct()

{

builder.buildPartA();

builder.buildPartB();

builder.buildPartC();

returnbuilder.getResult();

};第五步,定义客户端类;客户需要什么样的产品,交给Director,Director类注入Builder,由director的construct()方法返回产品给客户。具体建造产品的过程是construct()方法,其是通过调用concretebuilder的方法buildPartA()方法来建造产品。客户不需要知道具体的建造过程。;优点:

1、产品的建造和表示分离,实现了解耦。

2、将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰

3、增加新的具体建造者无需修改原有类库的代码,易于拓展,符合“开闭原则“。;缺点:

1、产品必须有共同点,限制了使用范围。

2、如内部变化复杂,会有很多的建造类,难以维护。;小结;;一、任务描述

二、任务分析、设计

三、任务实施

四、运行结果;30;二、任务分析、设计;实现思路:

按照典型建造者设计模式的实现过程,创建各个类。;抽象产品类Product。

具体产品类。包括:文学作品类LiteraryWorks,影视作品类FilmWorks,动漫作品类AnimationWorks

建造者接口Builder。

具体建造者类。包括:影视作品建造者类FilmWorksBuilder,文学作品建造者类LiteraryWorksBuilder,动漫作品建造者类AnimationWorksBuilder等。

指挥者类Director。

客户端类Client。;其类图如图9-1所示;三、任务实施;抽象类,封装作品名称、作者、耗资及故事情节等信息

封装setter和getter方法

重写toString方法;第二步.定义具体产品类;publicclassLiteraryWorksextends

显示全部
相似文档