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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值