一、简单工厂模式

来源:互联网 发布:蜘蛛池源码下载 编辑:程序博客网 时间:2024/04/19 13:14

1、简单工厂模式:又叫做静态工厂模式,简单工厂模式是由一个工厂对象决定创建哪一种产品类的实例。简单工厂模式设计到工厂角色、抽象产品角色以及具体角色三个角色:

   1)工厂类(Creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的java类实现。

   2)抽象产品(Product)角色:担任这个角色的类是一个由工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个java接口或者java抽象类实现。

   3)具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体java类实现

 

简单工厂模式实例代码(以水果为例):

1、抽象产品角色(可以使用接口,也可以使用抽象类)

package com.design.pattern.simplefactory;

public interface Fruit {

 /**
     * 生长
      */
    void grow();
     /**
     *收获
      */
     void harvest();
     /**
       *种植
      */
     void plant();
  }

2、具体产品

package com.design.pattern.simplefactory;

public class Grape implements Fruit {

 private boolean seedless;
          public void grow() {
              log("Grape is growing.....");
           }

      public void harvest() {
              log("Grape has been harvested.");
           }

      public void plant() {
              log("Grape has been planted.");
           }
          public static void log(String msg){
              System.out.println(msg);
           }
          public boolean getSeedless(){
             return seedless;
           }
          public void setSeedless(boolean seedless){
             this.seedless=seedless;
          }
    }

package com.design.pattern.simplefactory;

public class Strawberry implements Fruit {

 public void grow() {
        log("Strawberry is growing.....");
       }

 public void harvest() {
        log("Strawberry has been harvested.");
      }

 public void plant() {
        log("Strawberry has been planted.");
      }

 public static void log(String msg){
         System.out.println(msg);
      }
  }

package com.design.pattern.simplefactory;

public class Apple implements Fruit {

 private int treeAge;
     /**
       * 生长
      */
       public void grow() {
         log("Apple is growing....");
        }

    /**
         * 收获
        */
      public void harvest() {
         log("Apple has been harvested.");
      }

   /**
        * 种植
       */
     public void plant() {
         log("Apple has been planted.");
     }

 /**
     * 辅助方法
      * @param msg
     */
     public static void log(String msg){
       System.out.println(msg);
     }
    /**
     * 树龄
    * @return
    */
    public int getTreeAge(){
    return treeAge;
   }
   public void setTreeAge(int treeAge) {
    this.treeAge = treeAge;
   }
}
    3、工厂类

package com.design.pattern.simplefactory;

public class FruitGardener {

 public static Fruit factory(String which)throws BadFruitException{
         if(which.equalsIgnoreCase("apple")){
               return new Apple();
          }else if(which.equalsIgnoreCase("strawberry")){
               return new Strawberry();
          }else if(which.equalsIgnoreCase("grape")){
               return new Grape();
          }else{
               throw new BadFruitException("Bad fruit request.");
          }
      }
  }

    4、测试

package com.design.pattern.simplefactory;

public class TestSimpleFactory {


     public static void main(String[] args) {
       try{
         FruitGardener.factory("grape");
         FruitGardener.factory("apple");
         FruitGardener.factory("strawberry");
       }catch(BadFruitException e){
     }
   }

}

原创粉丝点击