那些做seo的网站公司网站制作高端
那些做seo的网站,公司网站制作高端,企业信用报告网上查询,商务网站页面什么是建造者模式#xff1f;
传说女娲是用泥巴捏出人来的#xff0c;当时捏出的小泥人虽然每个都是两条腿、两只手、一个脑袋的样子#xff0c;但是具体到每个部位#xff0c;却有有所不同#xff1a;有的小泥人手长一点#xff0c;有的手短一点#xff1b;有的脑袋圆…什么是建造者模式
传说女娲是用泥巴捏出人来的当时捏出的小泥人虽然每个都是两条腿、两只手、一个脑袋的样子但是具体到每个部位却有有所不同有的小泥人手长一点有的手短一点有的脑袋圆鼓鼓的有的脑袋尖尖的······
造物者归纳起来其实就一句话女娲造人形态各异。
也就是说当初女娲在造人的时候她的心中是有一副蓝图——即是人型的样子但是在塑造不同部位的时候选择的是不同的“捏制”手法。女娲作为造物者便是建造者模式最好的例子了。
让我们来看看建造者模式的定义
建造者模式生成器模式将一个复杂对象的构建与它的表示分离使得同样的构造器过程可以创建不同的表示。
它的UML类图表示如下 Builder是为创建一个具体产品、具体对象的各个部件指定的抽象接口 放到女娲造人的传说里那就是人型蓝图。ConcreteBuilder则是实现Builder抽象方法的具体建造类它可以看作是更为详细的蓝图指明了高矮胖瘦、男女老幼。
Director则是根据ConcreteBuilder来具体构造产品、对象的它使用了Builder接口 在传说中这就是造物者——女娲。
光靠定义难以理解我们接下来看一个例子吧。
如何使用建造者模式
举个例子
相信大家不少都玩过游戏自然知道游戏的捏脸系统。捏脸系统可以让玩家选择人物的各个部位的大小、形状等等体验一把造物者的感觉。除了玩家的角色里面的NPC也是通过这个捏脸系统生成的造成游戏里的角色形态各异。就像下面这种 今天我就以一建造者模式来实现一个简单的游戏捏脸系统。这个捏脸系统可以设置姓名、选择人物的四肢、头部、服饰、武器、天赋等。
UML类图设计
整个系统的UML类图如下 实现代码
抽象建造类声明建造一个角色所必备的部件。
abstract public class AbstractBuilder {public abstract void BuildHead ();public abstract void BuildBody ();public abstract void BuildArms();public abstract void BuildLegs();public abstract void ChooseGenius();public abstract void ChooseCloth();public abstract void ChooseWeapon();public abstract void SetName();
}由于该抽象类的所有方法都被声明为了抽象方法继承它的子类必须实现所有的抽象方法这就防止了某些部件的缺失。
具体建造类用来选择角色每个部位具体的属性。我们来为这个游戏时间创建几个NPC如下。
弓箭手
public class ArcherBuilder extends AbstractBuilder {Overridepublic void BuildHead() {System.out.println(头部精灵脑袋);}Overridepublic void BuildBody() {System.out.println(躯干精灵身体);}Overridepublic void BuildArms() {System.out.println(手臂精灵手臂);}Overridepublic void BuildLegs() {System.out.println(腿部精灵腿);}Overridepublic void ChooseGenius() {System.out.println(天赋鹰眼急性弯弓);}Overridepublic void ChooseCloth() {System.out.println(服饰初级弓箭手套装);}Overridepublic void ChooseWeapon() {System.out.println(武器新手木弓);}Overridepublic void SetName() {System.out.println(姓名潘德初级射手);}
}战神刑天
public class GiantBuilder extends AbstractBuilder {Overridepublic void BuildHead() {System.out.println(头部巨人头);}Overridepublic void BuildBody() {System.out.println(躯干荒古圣体);}Overridepublic void BuildArms() {System.out.println(手臂麒麟臂);}Overridepublic void BuildLegs() {System.out.println(腿部刑天之腿);}Overridepublic void ChooseGenius() {System.out.println(天赋威压力巨不死);}Overridepublic void ChooseCloth() {System.out.println(服饰刑天套);}Overridepublic void ChooseWeapon() {System.out.println(武器刑天斧);}Overridepublic void SetName() {System.out.println(姓名战神刑天);}
}j另外邓布利多、骑士长等代码就不贴了请至源码查看。
玩家类用来调用具体的角色类的构造方法实现所有角色的部件按照顺序生成无一缺漏。
public class Player {private AbstractBuilder abstractBuilder;public Player(AbstractBuilder abBuilder) {abstractBuilderabBuilder;}public void CreateCharacter(){System.out.println(创建角色中......);abstractBuilder.BuildHead();abstractBuilder.BuildBody();abstractBuilder.BuildArms();abstractBuilder.BuildLegs();abstractBuilder.ChooseGenius();abstractBuilder.ChooseCloth();abstractBuilder.ChooseWeapon();abstractBuilder.SetName();System.out.println(角色创建完毕);}
}jj游戏客户端用于创建对应的NPC角色
public class GameClient {public static void main(String[] args) {ArcherBuilder archerBuilder new ArcherBuilder();KnightBuilder knightBuilder new KnightBuilder();MasterBuilder masterBuilder new MasterBuilder();GiantBuilder giantBuilder new GiantBuilder();ArrayListAbstractBuilder builders new ArrayList();builders.add(archerBuilder);builders.add(knightBuilder);builders.add(masterBuilder);builders.add(giantBuilder);System.out.println(世界角色构造中请稍候......);for (AbstractBuilder builder:builders) {Player player new Player(builder);player.CreateCharacter();System.out.println( );}System.out.println(世界角色构造完毕祝您游戏愉快);}
}运行结果
世界角色构造中请稍候......
创建角色中......
头部精灵脑袋
躯干精灵身体
手臂精灵手臂
腿部精灵腿
天赋鹰眼急性弯弓
服饰初级弓箭手套装
武器新手木弓
姓名潘德初级射手
角色创建完毕创建角色中......
头部西方帝国头
躯干骑士躯
手臂百战臂
腿部千夫长之腿
天赋勇猛不惧冲锋
服饰东罗帝国飞羽骑士套
武器高仿战神枪
姓名大骑士长
角色创建完毕创建角色中......
头部普通人类头
躯干老迈躯
手臂骨瘦臂
腿部不动冥王腿
天赋无量洞察瞬发
服饰大法师袍
武器瓦巴杰克
姓名阿不思·邓布利多
角色创建完毕创建角色中......
头部巨人头
躯干荒古圣体
手臂麒麟臂
腿部刑天之腿
天赋威压力巨不死
服饰刑天套
武器刑天斧
姓名战神刑天
角色创建完毕世界角色构造完毕祝您游戏愉快总结
应用场景
建造者模式主要是用于创建一些复杂的对象这些对象内部间的构造顺序、构造部件通常是稳定的但是对象内部的具体构建方法常常是变化的。
除了之前说到的女娲造人、游戏捏人的例子生活中的麦当劳、肯德基等流水线式的快餐食品其实也是建造者模式的一个例子每种汉堡的用料、时间都是不同的但是顺序和组成部件确实大同小异比如都的要两片面包、中间加肉等等只不过面包种类不一样肉的种类也可以不一样。
另一个建造者模式的例子可以拿五一假期的安排来说假期时长一共五天但是每一天究竟干什么、去哪、干多久都是可以任意规划和选择的。
优点
封装性强建造代码与表示代码分离由于建造者隐藏了该产品是如何组装的所以外部客户是无法知道其内部实现代码扩展性强若需要改变一个产品的内部表示只需要再定义一个具体的建造者就可以了过程精细化 通过创建者模式可以实现每一个过程都依次无误进行并且每一个过程还可以进一步分为更多的子过程例如捏脸系统的头部还可以细化为五冠、表情等等这可以通过对头部进行另一个建造者模式来实现。
缺点
由于每个角色之间的组件无法复用当建造者类太多代码较为臃肿此时需要结合其他的设计模式进行优化例如组合模式。只适合于最终的实例组成部分相似的情况。
项目地址
https://github.com/white0dew/Design-pattern/tree/master
往期文章
大话设计模式(1)——设计原则与单例模式 大话设计模式(2)——策略模式 参考链接
《大话设计模式》
《Headfist 设计模式》
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88978.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!