java建造者模式小demo

java建造者模式小demo构造者模式其实就是这个目的 某些类创建实例的时候 过程是一样的 但由于过程繁琐 很容易缺东少西组件没构造全 为了防止这种情况 我们将构造过程抽出来 统一管理 避免该问题发生 首先 我们定义这个统一的过程 package interfaze

大家好,我是讯享网,很高兴认识大家。

构造者模式其实就是这个目的——某些类创建实例的时候,过程是一样的,但由于过程繁琐,很容易缺东少西组件没构造全。为了防止这种情况,我们将构造过程抽出来,统一管理,避免该问题发生。

首先,我们定义这个统一的过程:

package interfaze; / * 所有游戏人物的套装均需遵守的约束 * * @author lxp * */ public interface ISkin { / * 获取头盔 */ void gainHelmet(); / * 获取战衣 */ void gainBattleSuit(); / * 获取坐骑 */ void gainMount(); } 

讯享网
然后,让这些类都实现上述过程:


讯享网

讯享网package impl; import bean.BattleSuit; import bean.Helmet; import bean.Mount; import interfaze.ISkin; import supper.Person; / * 软妹型游戏人物 * * @author lxp * */ public class SoftGirl extends Person implements ISkin { / * 获得头盔 */ @Override public void gainHelmet() { System.out.println("我有了" + this.getHelmet().getName()); } @Override public void gainBattleSuit() { System.out.println("我有了" + this.getBattleSuit().getName()); } @Override public void gainMount() { System.out.println("我有了" + this.getMount().getName()); } public SoftGirl(Helmet helmet, BattleSuit battleSuit, Mount mount) { super(helmet, battleSuit, mount); } } 

package impl; import bean.BattleSuit; import bean.Helmet; import bean.Mount; import interfaze.ISkin; import supper.Person; / * 五大三粗型游戏人物 * * @author lxp * */ public class Strong extends Person implements ISkin { @Override public void gainHelmet() { System.out.println("我有了" + this.getHelmet().getName()); } @Override public void gainBattleSuit() { System.out.println("我有了" + this.getBattleSuit().getName()); } @Override public void gainMount() { System.out.println("我有了" + this.getMount().getName()); } public Strong(Helmet helmet, BattleSuit battleSuit, Mount mount) { super(helmet, battleSuit, mount); } } 

最后,我们还要将这个过程统一管理:

讯享网package common; import interfaze.ISkin; import supper.Person; public class Builder { / * 创建的任务 */ private Person p; / * 所有的人物的组装都在这里,不会遗漏某一环节。 */ public void createPerson() { ((ISkin) p).gainHelmet(); ((ISkin) p).gainBattleSuit(); ((ISkin) p).gainMount(); } public Builder(Person p) { super(); this.p = p; } } 

以上就是主要代码段。其他文件见这里:

package supper; / * 装备的父类 * * @author lxp * */ public class Equpment { / * 装备名称 */ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 

讯享网package supper; import bean.BattleSuit; import bean.Helmet; import bean.Mount; / * 人物类共用的 * * @author lxp * */ public class Person { / * 头盔 */ private Helmet helmet; / * 战衣 */ private BattleSuit battleSuit; / * 坐骑 */ private Mount mount; public Helmet getHelmet() { return helmet; } public void setHelmet(Helmet helmet) { this.helmet = helmet; } public BattleSuit getBattleSuit() { return battleSuit; } public void setBattleSuit(BattleSuit battleSuit) { this.battleSuit = battleSuit; } public Mount getMount() { return mount; } public void setMount(Mount mount) { this.mount = mount; } public Person(Helmet helmet, BattleSuit battleSuit, Mount mount) { super(); this.helmet = helmet; this.battleSuit = battleSuit; this.mount = mount; } } 

package bean; import supper.Equpment; / * 坐骑类 * * @author lxp * */ public class Mount extends Equpment { / * 设置坐骑名称 * * @param mount */ public Mount(String mount) { this.setName(mount); } } 

讯享网package bean; import supper.Equpment; / * 头盔类 * * @author lxp * */ public class Helmet extends Equpment { / * 设置头盔名称 * * @param helmet */ public Helmet(String helmet) { this.setName(helmet); } } 

package bean; import supper.Equpment; / * 战衣类 * * @author lxp * */ public class BattleSuit extends Equpment { / * 设置战衣名称 * * @param battleSuit */ public BattleSuit(String battleSuit) { this.setName(battleSuit); } } 

讯享网package test; import bean.BattleSuit; import bean.Helmet; import bean.Mount; import common.Builder; import impl.SoftGirl; import impl.Strong; public class TestBuilder { public static void main(String[] args) { Helmet softHelmet = new Helmet("粉红头盔"); Helmet strongHelmet = new Helmet("飞天头盔"); BattleSuit softSuit = new BattleSuit("粉色战衣"); BattleSuit strongSuit = new BattleSuit("侠盗战衣"); Mount softMount = new Mount("粉红坐骑"); Mount strongMount = new Mount("瀚海麒麟"); Builder softGirl = new Builder(new SoftGirl(softHelmet, softSuit, softMount)); Builder strong = new Builder(new Strong(strongHelmet, strongSuit, strongMount)); // 无论是哪种任务的构建过程都是统一控制的,不会出现缺东少西,尤其是组件多的情况下。 // 缺点是,稍有这种情况,某些实例有相同的构建过程。 // 故只将共同的提取出来为好。 softGirl.createPerson(); strong.createPerson(); } } 
=====================================欢迎交流指点^_^,:,加请注明“探讨设计模式”字样哦=================================

小讯
上一篇 2025-01-24 11:08
下一篇 2025-03-30 20:15

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/72715.html