четверг, 10 марта 2011 г.

Строитель

Шаблон позволяет уменьшить связь клиентского кода и логики создания сложного объекта при помощи цепочки интерфейсов: управляющий класс - практически не меняется, затем строитель описывающий методы и собственно сложный объект. Также позволяет задать порядок построения частей как в этом примере, что может быть очень важно, а пользователь объекта может об этом не знать. Так задать тип человека(ребенок, взрослый или старик) нельзя не зная возраста!
public class app
{
 public static void main(String[] args)
 {
  LifeCircle lc=new LifeCircle();
  lc.setHumanBuilder(new ManBuilder());
  lc.build(13);
  System.out.println(lc.getResult().type);
  lc.build(20);
        System.out.println(lc.getResult().type);
  lc.build(100);
  System.out.println(lc.getResult().type);
 }
}
abstract class Human
{
 public int age;
 public String type;
}

class Man extends Human{}

interface HumanBuilder
{
 public void buildAge(int age);
 public void buildType();
 public Human getResult();
}
class LifeCircle
{
 private HumanBuilder humanBuilder;
 public void setHumanBuilder(HumanBuilder builder)
 {this.humanBuilder=builder;}
 public void build(int age)
 {
  this.humanBuilder.buildAge(age);
  this.humanBuilder.buildType();
 }
 public Human getResult()
 {return this.humanBuilder.getResult();}
}
class ManBuilder implements HumanBuilder
{
 private Human human=new Man();
 public void buildAge(int age){human.age=age;}
 public void buildType()
 {
  if(human.age>0 && human.age<=15) human.type="children";
  if(human.age>15 && human.age<=55) human.type="man";
  if(human.age>55) human.type="grand man";
 }
 public Human getResult(){return this.human;}
}


Комментариев нет:

Отправить комментарий