设计模式感悟之创建型模式

创建型模式总结:

    地球(客户)需要一个大自然(产品),该大自然需要有很多动物(产品功能),很多植物(产品功能).大自然使用单例模式和抽象工厂模式的结合模式.动物和植物采用简单工厂方法模式创建.以创建动物为例:在简单工厂里遇到相同的"人",直接采用原型模式克隆,法则采用建造者模式创建.

public Animal

{

    private String mType = null;

    public Animal clone()

    {

          ...

     }

    public String getType()

    {

          return mType;

     }

}

public HumanAnimal extends Animal

{

    public static Builder()

    {

          public Build add(String part)

          {

          }

           public HumanAnimal build()

           {

             }  

     }

}

public AnimalFactory

{

    private Animal mLastAnimal = null;

    public Animal create(String type)

    {

          if(type.equals(mLastAnimal.getType))

          {

              return mLastAnimal.clone();

             }

           else

              {

                   Animal temp=null;

                   if(type.eaual("人"))

                      {

temp = new HumanAnimal.builder().add("手").add("头").add("脚").add("躯干").build();

                     }

                   ...//其它动物略

mLastAnimal = temp;

                   return temp;

             }

     }

}

private class Nature

{

    private List<Animal>  mAnimals= new ArrayList<Animal>();

    private List<Plant>     mPlants = new ArrayList<Plant>();

    private static Nature mInstance = null;

    private Nature()

     {

             mAnimals.add(AnimalFactory.create("人"));

             mAnimals.add(AnimalFactory.create("人"));

             mAnimals.add(AnimalFactory.create("狗"));

              mAnimals.add(AnimalFactory.create("草鱼"));

              ...

              mPlants.add(PlantFactory.create("喇叭花"));

mPlants.add(PlantFactory.create("桃树"));

              ...

     }

     public static Nature getInstance()

     {

          if(mInstance == null)

          {

              mInstance = new Nature();

           }

           return mInstance;

     }

     public List<Animal> getAnimals()

     {

          return mAnimals;

     }

      public List<Plant> getPlants()

     {

          return mPlants;

    }

}

posted @ 2015-05-06 15:49  刘伟强的博客  阅读(226)  评论(0编辑  收藏  举报