gpt4 book ai didi

c# - 用于在多个平台上实现 AdNetworks 的抽象工厂模式

转载 作者:行者123 更新时间:2023-11-30 17:39:39 24 4
gpt4 key购买 nike

这是 link到github项目。

我想实现抽象工厂,而不是只在一个文件中添加依赖于平台的编译标志并使其变得丑陋。因此解耦代码。此外,我必须在不同的平台上实现不同的广告网络。

这是界面

public interface IAds 
{
void ShowVideoAd();
void PreLoadVideoAd();
bool IsAdAvailable();

}

所有的PlatformAdController(Android, IOS, Amazon, Windows)都会实现这个接口(interface)。

    public class AmazonAdsController : IAds
{
// Code Goes here
}

然后在someFactoryClass我会做

public IAds GetObject()
{
#if UNITY_Android
if(platform == Amazon)
return new AmazonAdsController
else
return new AndroidAdsController
#elif UNITY_IOS
return new IOSAdsController
#elif UNITY_WP10
return new WindowsAdsController
}

此方法将从 AdManager 的单例 MonoBehaviour 中调用。我当前的 AdManager 状态是

namespace MS.Ads
{
[RequireComponent(typeof(KeyGenerator))]
public class AdManager : MonoBehaviour
{
#region Fields & Properties
[SerializeField]
private KeysSource _keysSource;
[SerializeField]
[HideInInspector]
private string _fileName;
[SerializeField]
[HideInInspector]
private string _url;

// Source from where to get keys
public KeysSource Source
{
get { return _keysSource; }
set { _keysSource = value; }
}

// Web URL from where to get AdKeys
public string URL
{
get { return _url; }
set { _url = value; }
}

// FileName from where to get Adkeys e.g adc.json
public string FileName
{
get { return _fileName; }
set { _fileName = value; }
}

// To be replaced by a FactoryObject.
private FyberController _fyberController;
#endregion

#region Message Methods
void Start()
{
GetComponent<KeyGenerator>().GenerateKeys(Source, URL, FileName);
_fyberController = new FyberController();
_fyberController.RequestVideoAd();
}
#endregion

#region Methods
public void ShowAd()
{
if (_fyberController.IsVideoAdAvailable)
_fyberController.ShowVideoAd();
}

public bool IsVideoAdAvailable()
{
return _fyberController.IsVideoAdAvailable ? true : false;
}
#endregion
}
}

我想知道的

  1. 工厂模式是这里的正确选择吗?
  2. 如果是,我应该使用接口(interface)、抽象基类还是具有虚方法的基类?

最佳答案

1- 是的,你可以在这里使用工厂模式,你完全可以接受。明天如果您有另一个广告,您可以轻松地将其添加到工厂。

2- 有两种创建工厂模式的方法。 抽象工厂模式通过组合将对象实例化的责任委托(delegate)给另一个对象,工厂方法模式使用继承并依赖子类来处理所需的对象实例化。这取决于您的需求。

在这种情况下,您使用的是工厂方法模式。它比抽象工厂模式更易于使用。

关于c# - 用于在多个平台上实现 AdNetworks 的抽象工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35244375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com