• 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();
            
        }
    }
  • 相关阅读:
    赶紧收藏吧!MyBatis-Plus万字长文图解笔记,错过了这个村可就没这个店了
    这篇建议java开发都看看,对Java方法及加深理解的很深,值得一看!
    秒极啊!手把手带你进行shiro授权拦截器的重写,学到了学到了
    java面试复习重点:类的管理及常用工具,教你抓住面试的重点!
    手撸一个外卖点餐系统后台,可以写上简历的实战项目!
    JVM类加载机制详解,建议看这一篇就够了,深入浅出总结的十分详细!
    这份SpringMVC执行原理笔记,建议做java开发的好好看看,总结的很详细!
    iOS-----GitHub上比较齐全的iOS 工具和App
    iOS-----AVFoundation框架的功能详解
    iOS-----UIScrollView
  • 原文地址:https://www.cnblogs.com/excellencesy/p/8944448.html
Copyright © 2020-2023  润新知