彻底明白Android设计模式—工厂方法模式

2020/4/21 23:17:24

本文主要是介绍彻底明白Android设计模式—工厂方法模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的

ok,还是举个🌰, 既然是工厂模式,就打比方有一个工厂生产产品,首先要一个抽象产品类,描述产品的公共方法,以及两个具体的产品(手机产品和电视产品):

/**
     * 抽象产品类,所有产品的抽象父类,描述公共的方法部分
     */
    public abstract class Product {
        public abstract void dosomething();
    }

    /**
     * 具体产品类,所有产品的抽象父类,描述公共的方法部分
     * 这里比如想生产 手机产品,电视产品
     */
    public class PhoneProduct extends Product {

        @Override
        public void dosomething() {
            //具体事情实现,比如这里生产cpu,屏幕,摄像头等制作手机
        }
    }

    public class TvProduct extends Product {

        @Override
        public void dosomething() {
            //具体事情实现,比如这里生产电视屏幕,遥控器等
        }
    }
复制代码

再把工厂的制造产品方法抽象出来,实现具体工厂类

 /**
     * 抽象工厂类,生产一个泛型的产品对象
     */
    public abstract class Factory {
        public abstract Product createProduct(Class<? extends Product> c);
    }


    /**
     * 具体工厂类,所有产品从这里生产,可以返回具体的产品对象
     */
    public class RealFactory extends Factory {

        public Product createProduct(Class<? extends Product> c) {
            Product product = null;
            try {
                product = (Product) Class.forName(c.getName()).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return product;
        }
    }
复制代码

ok,所有工作就绪,一套工厂系统完成,接下来就可以让工厂建造出不同的产品,而且需要新产品只需要实现Product接口即可,实现解耦

    public void main() {
        Factory factory = new RealFactory();
        Product product=factory.createProduct(PhoneProduct.class);
        product.dosomething();

    }
复制代码

在Android中的应用

说个比较常见的需求吧,比如老板让你设计app中的支付功能,支付方式有很多,以后也有可能添加支付方式。 这时候就可以把支付方式抽象出来,用一个工厂类统一管理,用于返回具体的支付方式类。这样支付的时候,调用工厂类的方法,把具体支付方式传给工厂就可以了。

简单写下代码:

public abstract class PayChannel {
        public abstract void doInit();

        public abstract void doPay();
    }

    public abstract class PayFactory {
        public abstract Product createProduct(Class<? extends PayChannel> c);
    }

    public class PayFactory extends PayFactory {

        public PayChannel createProduct(Class<? extends PayChannel> c) {
            //这里可以做一些统一的操作,比如记录数据等
            PayChannel payChannel = null;
            try {
                payChannel = (PayChannel) Class.forName(c.getName()).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return payChannel;
        }
    }

    public void main() {
        PayFactory payFactory = new PayFactory();
        PayChannel channel = payFactory.createProduct(WeixinPay.class);
        channel.doInit();
        channel.doPay();
    }
复制代码

其实我想过为什么非要通过工厂这一层呢?直接通过抽象类的实现类执行方法不行吗?后面我想了下,我的理解是工厂类可以统一管理,并且做一些统一操作,就跟实际的工厂可以统一管理机器生产产品一样。

如果有说的不对的地方可以一起讨论下。



这篇关于彻底明白Android设计模式—工厂方法模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程