设计模式--工厂模式

简述

  • 创建型设计模式
  • 顾名思义,工厂模式是创建一个产品的工厂,根绝不同类型创建不同实例

实现方式

  • 使用三方分享做演示, 三方分享不做重点实现,用伪代码代替
// 提供产品的抽象类
public class IShareService {
    fun share(context : Context, shareText: String, callback ShareCallback)
    
    fun destroy()
}

// 分享结果的回调
public interface ShareCallback{
    fun success(text: String)
    fun feild(text: String)
    fun cancel()
}

// 分享渠道 如:微信,QQ
public enum ShareType {
    WeChat,
    QQ // 此处可以任意扩展
}

// 实现QQ分享
public class QQShareService : IShareService {
    override fun share(context: Context, shareText: String, callback: ShareCallback) {
          // 此处做分享操作. 关注分享回调
          QQShare.share().callback() {
                fun success(text: String) {
                    callback.success(text)
                }
                fun feild(text: String) {
                    callback.feild(text)
                }
                fun cancel() {
                     callback.cancel()
                }
          }
    }
    
      override fun destroy() {
        // 释放资源
      }
}

// 实现微信分享
public class WeChatShareService : IShareService {
    override fun share(context: Context, shareText: String, callback: ShareCallback) {
          // 此处做分享操作. 关注分享回调
          WeChat.share().callback() {
                fun success(text: String) {
                    callback.success(text)
                }
                fun feild(text: String) {
                    callback.feild(text)
                }
                fun cancel() {
                     callback.cancel()
                }
          }
    }
    
      override fun destroy() {
        // 释放资源
      }
}

// 提供分享实例
public object IShareFactory {
      fun createShareService(shareType: ShareType): IShareService {
          var iShareType:IShareService? = null
          when(shareType) {
                ShareType.QQ -> iShareType = QQShareService()
                ShareType.WeChat -> iShareType = WeChatShareService()
          }
          if (iShareType == null) {
              throw RuntimeException("创建实例失败,检查分享类型")
          }
          return iShareType!!
      }
}


// 使用方式

class MainActivity : AppCompatActivity() {
    private var iShareServie: IShareService? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    override fun onClick(view: View?) {
        when(view?.id) {
            R.id.qq->{
                share(ShareType.QQ)
            }
             R.id.wechat->{
                share(ShareType.WeChat)
            }
        }
    }

    private share(shareType: ShareType) {
        iShareServie = IShareFactory. createShareService(shareType)
        iShareServie?.share(this, "分享内容", object: ShareCallback {
                fun success(text: String) {
                    // 分享成功
                }
                fun feild(text: String) {
                    // 分享失败
                }
                fun cancel() {
                     // 分享取消
                }
        })
    }

    override fun onDestroy() {
          // 销毁
          iShareServie?.destroy()
    }
}

你可能感兴趣的:(设计模式--工厂模式)