美文网首页
设计模式--工厂模式

设计模式--工厂模式

作者: caoww | 来源:发表于2020-12-30 11:28 被阅读0次

简述

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

实现方式

  • 使用三方分享做演示, 三方分享不做重点实现,用伪代码代替
// 提供产品的抽象类
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()
    }
}

相关文章

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

网友评论

      本文标题:设计模式--工厂模式

      本文链接:https://www.haomeiwen.com/subject/jbvcoktx.html