建造者模式

xiaoxiao2021-02-28  41

分离了对象组建的单独构造,从而可以构造出复杂的对象,这个模式造用于:某个对象的构建过程复杂的情况下使用。

由于实现了构造和装配的解耦。不同的构造器,相同的装配,也可以做出不同的对象;相同的构造器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配逄法的解耦,实现了更好的复用。

建造班级,创建学生与老师两个类

publicclass Student {

   private String name;

   public String getName() {

      returnname;

   }

   publicvoid setName(String name) {

      this.name = name;

   }

   publicvoid info(){

      System.out.println("sayHi");

   }

}

publicclass Teacher {

   private String name;

   public String getName() {

      returnname;

   }

   publicvoid setName(String name) {

      this.name = name;

   }

   publicvoid info(){

      System.out.println("sayHello");

   }

}

                                              

publicclass TheClass {

   private Student student;

   private Teacher teacher;

   public Student getStudent() {

      returnstudent;

   }

   publicvoid setStudent(Student student) {

      this.student = student;

   }

   public Teacher getTeacher() {

      returnteacher;

   }

   publicvoid setTeacher(Teacher teacher) {

      this.teacher = teacher;

   }

}

publicinterface IInstanceBulider {

   public Student buliderStudent();

    public Teacher buliderTeacher();

}

class InstanceBulider implements IInstanceBulider{

   @Override

   public  Student buliderStudent() {

      returnnew Student();

   }

   @Override

   public  Teacher buliderTeacher() {

      returnnew Teacher();

   }

}

装配接口与装配类                                                         

//装配接口、装配班级方法。

publicinterface buliderTheClass {

   public TheClass createTheClass();

}

//装配实现、实现装配班级方法

class InstanceClass implements buliderTheClass{

   //调用工厂

   private InstanceBulider ib;

   public InstanceClass(InstanceBulider ib){

      this.ib  = ib;

   }

   //进行装配、返回班级。

   @Override

   public TheClass createTheClass() {

      Student stu = ib.buliderStudent();

      Teacher th = ib.buliderTeacher();

      TheClass tc = new TheClass();

      tc.setStudent(stu);

      tc.setTeacher(th);

      return tc;

   }

}

 

publicclass Main {

   publicstaticvoid main(String[] args) {

      InstanceClass ic = new InstanceClass(new InstanceBulider());

      TheClass tc = ic.createTheClass();

      tc.getStudent().info();

      tc.getTeacher().info();

   }

}

输出结果:

    sayHi

sayHello

 

开发中应用场景:

StringBuilder类的append方法

SQL中的PrearedStatement

JOM中、DomBuilder、SAXBuilder

 

publicclass Factory {

   publicstatic Object getInstance(String className){

      Object obj;

      try {

        obj = Class.forName(className).newInstance();

        return obj;

      } catch (Exception e) {

        e.printStackTrace();

      }

      returnnull;

   }

}

转载请注明原文地址: https://www.6miu.com/read-2614015.html

最新回复(0)