胖蔡说技术
随便扯扯

Java实现工厂模式

工厂模式,主要分为三种类型的工厂模式:

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式

如上工厂模式的demo实现都是基于:

  1. Product.java 产品接口
public interface Product {

    String TAG=Product.class.getSimpleName();
    /**
     * 产品销售方法
     */
    void sale();

    /**
     * 安全检测方法
     */
    void securityDetection();
}
  1. House.java 实体实现类,真实产品
   public class House implements Product {

       @Override
       public void sale() {
           //horse sale method
           System.out.println("house sale method.");
       }

       @Override
       public void securityDetection() {
           System.out.println("house securityDetection method.");
       }
   }
  1. Insurance.java 实体实现类,真实产品
public class Insurance implements Product {

    @Override
    public void sale() {
        System.out.println("Insurance sale method.");
    }

    @Override
    public void securityDetection() {
        System.out.println("Insurance securityDetection method.");
    }
}

并通过工厂类对其进行实现的。

简单工厂模式

原理图:

   /**
     *
     * @param productName
     * @return
     * @throws IllegalProductException
     * 工厂创建类
     */
    public static Product createProduct(String productName) throws IllegalProductException {
        Product product=null;
        if (productName==null || productName.length()==0){
            throw new NullPointerException("product name not null.");
        }

        if (productName.equalsIgnoreCase("house")){
            //返回房子产品
            product=new House();
        }else if (productName.equalsIgnoreCase("insurance")){
            //返回保险产品
            product=new Insurance();
        }else {
            throw new IllegalProductException("product name not exits.");
        }
        return product;
    }

通过传入名称过滤新建对应的产品类。也可以如下直接通过反射获取。

 public static Object create(String className){
        try {
          Object object= Class.forName(className).newInstance();
            return object;
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        return null;
    }

工厂方法模式

原理图:

按照工厂的需求分设不同部门生产不同的产品,即本身的工厂类不参与生产,由各个分部门制定生产计划,具体代码如下:

  1. 工厂类
public abstract class MethodFactory {
    public abstract  Product createProduct();
}
  1. 部门生产类
public class InsuranceFactory extends MethodFactory {
    @Override
   public Product createProduct() {
        System.out.println("InsuranceFactory creator.");
        return new Insurance();
    }
}
public class HouseFactory extends MethodFactory {

    @Override
    public Product createProduct(){
        System.out.println("HouseFactory creator.");
        return new House();
    }
}
  1. 调用过程
 MethodFactory methodFactory=new HouseFactory();
        product=methodFactory.createProduct();
        product.sale();

抽象工厂模式

抽象工厂模式好似一个组装的过程,一件产品可能有多个部分组成,而每个部分的零件可以通过代加工的外包给外部工厂完成, 而自己则完成零件的组装工作。

  1. 代工厂1
public interface LED{
      void product1();
}

//lenovo led product
public class LenovoLED implements LED{
   public  void product1(){
    System.out.println("LenovoLED product1.");
   }
}



//samsung led product
public class SAMSUNGLED implements LED{
   public  void product1(){
    System.out.println("SAMSUNGLED product1.");
   }
}
  1. 代工厂2
public interface Mouse{
      void product2();
}

//lenovo mouse product
public class LenovoMouse implements Mouse{
   public  void product2(){
    System.out.println("LenovoMouse product2.");
   }
}



//samsung Mouse product
public class SAMSUNGMouse implements Mouse{
   public  void product2(){
    System.out.println("SAMSUNGMouse product1.");
   }
}
  1. 品牌组装
public abstract class AbstractFactory {

    public abstract Product createMouse();
    public abstract Human createLED();
}




//Lenovo factory
public class LenovoFactory extends AbstractFactory{

   public abstract Mouse createMouse(){
      System.out.println("LenovoMouse assembled Mouse.");

   }
    public abstract LED createLED(){
        System.out.println("LenovoMouse assembled LED.");
    }
}


//SAMSUNG factory
public class SAMSUNGFactory extends AbstractFactory{

   public abstract Mouse createMouse(){
      System.out.println("SAMSUNGMouse assembled Mouse.");

   }
    public abstract LED createLED(){
        System.out.println("SAMSUNGMouse assembled LED.");
    }
}
  1. 调用过程
 AbstractFactory abstractFactory=new LenovoFactory();
        abstractFactory.createMouse();
        abstractFactory.createLED();
  1. 使用场景

对于背景皮肤的设定,类似接入多种sdk广告的整合,可以按照广告的展示类型使用抽象工厂模式进行扩展.

代码地址:Java工厂模式

赞(1) 打赏
转载请附上原文出处链接:胖蔡说技术 » Java实现工厂模式
分享到: 更多 (0)

请小编喝杯咖啡~

支付宝扫一扫打赏

微信扫一扫打赏