建造者设计模式

 

/**
 * @Author zh
 * @Description英雄的实体类
 * @Date 2021/12/7
 */
public class Hero implements Serializable{
    //要构造的是英雄的名字 技能和装备
    private String name;
    private String skill;
    private String equip;
public abstract class HeroAbstract {
    //1.要有一个英雄对象
  public   Hero hero =new Hero();

    //2.有三个抽象方法 用来构造英雄的三个属性

    public abstract void buildName();
    public abstract void buildSkill();
    public abstract void buildEquip();

    //3.吧对象返回
    public Hero getHero() {
        return hero;
    }
}

 

 

public class HeroZs extends HeroAbstract {

    @Override
    public void buildName() {
        hero.setName("小乔");
    }

    @Override
    public void buildSkill() {
        hero.setSkill("......");
    }

    @Override
    public void buildEquip() {
        hero.setEquip("啥也没有.....");
    }
}
public class HeroDirector {
    //构造者抽象对象
    public  HeroAbstract heroAbstract;
    //2.提供一个构造器方法,用来接受具体的对象


    public HeroDirector(HeroAbstract heroAbstract) {
        this.heroAbstract = heroAbstract;
    }


    //3.最终返回的是产品对象,构造目标
    public Hero constructHero(){
        heroAbstract.buildName();
        heroAbstract.buildSkill();
        heroAbstract.buildEquip();

        return heroAbstract.getHero();
    }
}

 

 

 * 1.要有产品类 /例子里的实体类
 * 2.构造的抽象类
 * 3.构造的抽象类的重写类
 * 4.管理类
 * 5.测试类
 */
public class TMain {
    public static void main(String[] args) {
        //1.抽象类的实际对象
        HeroAbstract heroAbstract = new HeroZs();
        //2.指挥者对象(构造对象的管理者)
        HeroDirector heroDirector = new HeroDirector(heroAbstract);
        //3.调用指挥者的构造方法
        Hero hero = heroDirector.constructHero();
        System.out.println(hero);


        System.out.println("================================");

        HeroAbstract heroAbstract1 =new HeroLs();

        HeroDirector heroDirector1 =new HeroDirector(heroAbstract1);
        Hero hero1 = heroDirector1.constructHero();
        System.out.println(hero1);
    }
}

 

posted on 2021-12-08 17:37  无心睡眠A8  阅读(23)  评论(0)    收藏  举报