Android设计模式之工厂设计模式(Kotlin)

工厂模式的定义

定义一个创建对象的接口,让子类决定实例化哪个类。

工厂方法模式的使用场景

在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式。

工厂模式主要分为四大模块:

1.抽象工厂,其为工厂方法模式的核心。

2.具体工厂,其实现了具体的业务逻辑。

3.抽象产品,是工厂方法模式所创建的产品的父类。

4.具体产品,为实现抽象产品的某一个具体产品对象。

在这里插入图片描述
举例
这里我写了个简单的RxJava网络请求
需要:
1.抽象工厂
2.具体工厂
3.抽象产品
4.具体产品

抽象工厂

interface IRetrofitFactory {
    //制造一个产品 参数为我的产品类型,返回值为抽象产品
    fun makeProduct(type:RetrofitProductType):IRetrofitProduct
}

具体工厂


object RetrofitFacory : IRetrofitFactory {
    //当给出不同的产品类型就返回不同的具体产品实例
    override fun makeProduct(type: RetrofitProductType): IRetrofitProduct {
        when (type) {
            RetrofitProductType.GET -> {
                return GetProduct()
            }
            RetrofitProductType.UPLOAD -> {
                return UploadProduct()
            }
            RetrofitProductType.DOWNLOAD -> {
                return DownloadProduct()

            }
        }
    }

}

抽象产品

/*
* 抽象产品
* 需要做两件事
* 1.把具体产品创建出来
* 2.把产品返回给制造方
* */
interface IRetrofitProduct {
    fun createProduct()
    fun getProduct(): Retrofit?
}

具体产品

这里我只实现了一个类型的具体产品

 /*
 * 具体产品实现
 * */
class GetProduct : IRetrofitProduct {
    var retrofit: Retrofit? = null
    override fun createProduct() {
        retrofit = RetrofitUtils.getRetrofit()  //生产产品
    }

    override fun getProduct(): Retrofit? {
        if (retrofit == null) {    //当产品还没被创建出来的时候创建产品返回
            createProduct()
        }
        return retrofit
    }


}

实现

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        init() //初始化
        RetrofitFacory
            .makeProduct(RetrofitProductType.GET)   //工厂的制造产品并指定需要的产品类型
            .getProduct()                           //得到具体产品类实例在得到创建好的具体产品
            ?.create(API::class.java)
            ?.getXia()
            ?.subscribeOn(Schedulers.io())
            ?.observeOn(AndroidSchedulers.mainThread())
            ?.subscribe(object : Observer<XiaBean> {
                override fun onSubscribe(d: Disposable) {

                }

                override fun onNext(t: XiaBean) {
                    Log.d("---", "aaa" + t.data[1].title)
                    list.addAll(t.data)
                    rvadapter?.notifyDataSetChanged()
                }

                override fun onError(e: Throwable) {

                }

                override fun onComplete() {

                }

            })
    }

总体思路就是用你的工厂去制造一个产品(这里给一个产品类型),得到产品实例去创建出产品并返回

工厂模式的优缺点

优点: 封装对象创建过程的优点,降低客户端和工厂的耦合性.
缺点: 代码多,每创建一个对象,都要创建一个工厂

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值