• Android设计模式——工厂方法模式


    1.定义:工厂方法模式就是定义一个用于创建对象的接口,让子类决定实例化哪个类。

    2.看代码:

       产品抽象类

    public abstract class Product {
        /**
         * 产品类抽象方法
         */
        public abstract void method();
    
    }

    具体产品A

    public class ProductA  extends Product{
        private static final String TAG = "ProductA";
        @Override
        public void method() {
            Log.i(TAG, "method: "+"产品A");
        }
    }

    具体产品B

    public class ProductB extends Product {
        private static final String TAG = "ProductB";
    
        @Override
        public void method() {
            Log.i(TAG, "method: "+"产品B");
        }
    }

    抽象工厂类

    /**
     * 抽象工厂
     */
    public abstract class Factory {
    
        public abstract Product createProduct();
    }

    具体工厂类

    public class ConcreteFactory extends Factory {
        @Override
        public Product createProduct() {
            return new ProductA();
        }
    }

    实现

            Factory factory=new ConcreteFactory();
                Product a=factory.createProduct();
                a.method();

    其主要为:

    <1>抽象工厂,为工厂模式的核心

    <2>具体工厂,实现具体的逻辑功能

    <3>抽象产品,是工厂模式创建的产品的父类

    <4>具体产品,实现抽象产品的某个具体对象

    以上的方法如果需要得到ProductB的实例,可以创建productB的实例工厂。也可以在工厂的方法中传入Class类决定是哪一个产品类。

    抽象工厂类

    /**
     * 抽象工厂
     * 具体生产什么产品有子类实现
     * @param  tClass 产品对象类型
     * 
     */
    
    public abstract class Factory {
    
      public abstract <T extends Product> T CreateProduct(Class<T> tClass);
    
     }

    具体的工厂类,通过反射获取类的实例

    public class ConcreteFactory extends Factory {
        @Override
        public <T extends Product> T CreateProduct(Class<T> tClass) {
            Product product=null;
            try {
                product= (Product) Class.forName(tClass.getName()).newInstance();
    
            }catch (Exception e){
    
            }
            return (T)product;
        }
    }

    实现:

                Factory factory=new ConcreteFactory();
                Product product=factory.CreateProduct(ProductB.class);
                product.method();
    今天多一点积累,明天少一分烦恼
  • 相关阅读:
    mybatis:mybatis再总结
    shiro:RememberMe
    shiro:session管理
    shiro:缓存管理
    shiro:授权管理
    shiro:密码加密(加密、加盐加密)
    spring:spring再总结(ioc、aop、DI等)
    SpringBoot:整合layui、退出功能
    layui:内置模块(日期与时间、数据表格)
    nuxtjs中配置配置env
  • 原文地址:https://www.cnblogs.com/galibujianbusana/p/6413621.html
Copyright © 2020-2023  润新知