23种设计模式之建造者模式
建造者模式的定义建造者模式也叫生成器模式,定义如下: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 类图如下: ![]() 在建造者模式中,四个角色如下:
先看Product类的代码,通常他是一个组合或继承产生的类: ![]() 抽象建造者代码如下: ![]() 其中 setPart 方法是零件的配置,其他的对象,获得一个不同零件,或者不同的装配顺序就可能产生不同的产品 具体建造者代码如下: ![]() 导演类代码: ![]() 导演类起到封装的作用,避免高层模块深入到建造者内部的实现类. 当然,在建造者模式比较庞大时,导演类可以有多个 建造者模式分析现在又一个项目,创建不同的汽车,有奔驰的宝马的,车有启动、停止、喇叭声音、引擎声音,不同车有不同的顺序,开始创建,先使用模板方法模式,类图如下 ![]() 在CarModel中定义了一个 setSequence 方法,车辆模型的这几个动作要如何排布,是在 ArrayList中定义的. 然后run方法根据 sequence定义的顺序完成指定的顺序动作 CarModel代码: ![]() CarModel是这样设计的,setSequence方法允许客户自己设置一个顺序,是先启动还是先按喇叭,在子类中实现其基本方法,然后同过run方法实现顺序调用 其实现类代码就不再占用篇幅 这时有一个要求,生产一个奔驰模型,要先发动引擎,再启动,然后停下来,不需要按喇叭,创建代码如下: ![]() 这样我们就创建了一辆汽车,但是需求是汽车的执行顺序要能够随意调整,我们只满足了一个,还有下一个,下下个,那怎么办? 我们每次都要写这些来满足. 我们要想办法解决这个问题,那么我们可以通过建造者,通过建造者创建,类图如下 ![]() 其 CarBuilder 代码如下: ![]() 实现类代码如下 ![]() 这样,我们就可以通过一个导演类,封装各个顺序并返回产品 ![]() 其中的方法可以添加,可以有很多方法 这样,再创建的时候就轻松多了,直接调用一个方法即可 这不是一个单纯的建造者模式,其中使用了模板方法模式 建造者模式的应用优点如下:
建造者模式的使用场景:
建造者模式关注的是零件类型和装配工艺(顺序),这是它与工厂方法模式最大不同的地方,虽然同为创建类模式,但是注重点不同 建造者模式最主要的功能是基本方法的调用顺序安排,而工厂方法则重点是创建 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |