FactoryMethod

工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类

工厂方法的简单实现

(1)创建简单的产品接口

/**
 * 创建产品接口
 * @author Administrator
 *
 */
interface Fruit{
    //产品的共性方法
    public void productMethod();
}

(2)创建具体的产品实现类

/**
 * 创建产品类
 * @author Administrator
 *
 */
 class Apple implements Fruit{
     /**
      * 产品方法的具体实现
      */
     @Override
     public void productMethod()
     {
         System.out.println("apple");
     }
     
 }
/**
  * 创建产品类
  * @author Administrator
  *
  */
  class Banana implements Fruit{
      /**
       * 产品方法的具体实现
       */
      @Override
      public void productMethod()
      {
          System.out.println("banana");
      }
      
  }

(3)创建工厂接口

/**
 * 工厂接口
 * @author Administrator
 *
 */
 interface FruitFactory{
     /**
      * 生产产品
      * @return
      */
     public Fruit createProduct(String type);
}

(4)创建具体的工厂

/**
 * 具体的工厂类
 * @author Administrator
 *
 */
 class SouthFactory implements FruitFactory
 {
     /**
      * 生产产品
      */
     @Override
     public Fruit createProduct(String type)
     {
         Fruit fruit= null;
         if("apple".equals(type))
         {
             fruit=new Apple();
         }
         else if("banana".equals(type))
         {
            fruit=new Banana();
        }
         return fruit;
     }
 }
/**
  * 具体的工厂类
  * @author Administrator
  *
  */
  class NorthFactory implements FruitFactory
  {
      /**
       * 生产产品
       */
      @Override
      public Fruit createProduct(String type)
      {
         Fruit fruit= null;
         if("apple".equals(type))
         {
             fruit=new Apple();
         }
         else if("banana".equals(type))
         {
            fruit=new Banana();
        }
         return fruit;
     
      }
  }
 

(5)模拟客户端的实现

/**
  * 模拟客户端
  * @author Administrator
  *
  */
public class Client{
    public static void main(String[] args)
    {
        //创建工厂对象
        FruitFactory factory =new SouthFactory();
        //生产产品
        Fruit product=factory.createProduct("apple");
        //调用产品的方法
        product.productMethod();
        
    }
}

如果客户想得到一个南方的苹果,则需要告诉南方工厂,要一个苹果即可。

第一步:建立南方的工厂

第二步:有南方的工厂创建一个苹果

第三步:即可调用苹果中的产品了~

完整代码(完整代码中可以把这些类接口全放在一个java文件中,方便观察,当然,放在多个文件中也是可以的)

package com.songyan.designpattern;
/**
 * 创建产品接口
 * @author Administrator
 *
 */
interface Fruit{
    //产品的共性方法
    public void productMethod();
}

/**
 * 创建产品类
 * @author Administrator
 *
 */
 class Apple implements Fruit{
     /**
      * 产品方法的具体实现
      */
     @Override
     public void productMethod()
     {
         System.out.println("apple");
     }
     
 }
 
 /**
  * 创建产品类
  * @author Administrator
  *
  */
  class Banana implements Fruit{
      /**
       * 产品方法的具体实现
       */
      @Override
      public void productMethod()
      {
          System.out.println("banana");
      }
      
  }

/**
 * 工厂接口
 * @author Administrator
 *
 */
 interface FruitFactory{
     /**
      * 生产产品
      * @return
      */
     public Fruit createProduct(String type);
}
 
 
/**
 * 具体的工厂类
 * @author Administrator
 *
 */
 class SouthFactory implements FruitFactory
 {
     /**
      * 生产产品
      */
     @Override
     public Fruit createProduct(String type)
     {
         Fruit fruit= null;
         if("apple".equals(type))
         {
             fruit=new Apple();
         }
         else if("banana".equals(type))
         {
            fruit=new Banana();
        }
         return fruit;
     }
 }
 
 /**
  * 具体的工厂类
  * @author Administrator
  *
  */
  class NorthFactory implements FruitFactory
  {
      /**
       * 生产产品
       */
      @Override
      public Fruit createProduct(String type)
      {
         Fruit fruit= null;
         if("apple".equals(type))
         {
             fruit=new Apple();
         }
         else if("banana".equals(type))
         {
            fruit=new Banana();
        }
         return fruit;
     
      }
  }
 
 /**
  * 模拟客户端
  * @author Administrator
  *
  */
public class Client{
    public static void main(String[] args)
    {
        //创建工厂对象
        FruitFactory factory =new SouthFactory();
        //生产产品
        Fruit product=factory.createProduct("apple");
        //调用产品的方法
        product.productMethod();
        
    }
}
原文地址:https://www.cnblogs.com/excellencesy/p/8944448.html