自学内容网 自学内容网

Unity3D常见的设计模式(四)

系列文章目录

unity知识点



请添加图片描述

前言

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用 设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决 方案,这也是设计模式能被广泛应用的原因。

博客将会介绍Unity中常用的设计模式,每种设计模式都会给出详细的示例代码。希望这篇博客对Unity的开发者有所帮助。
大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
欢迎点赞评论哦.下面就让我们进入正文吧 !


提示:以下是本篇文章正文内容,下面案例可供参考

👉一、迭代器模式(Iterator)

介绍:
迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。

代码如下:

public interface IIterator<T> 
{
    bool HasNext();
    T Next();
}
 
public interface IAggregate<T> 
{
    IIterator<T> GetIterator();
}
 
public class ConcreteIterator<T> : IIterator<T> 
{
    private List<T> _items;
    private int _currentIndex = 0;
 
    public ConcreteIterator(List<T> items) 
    {
        _items = items;
    }
 
    public bool HasNext() 
    {
        return _currentIndex < _items.Count;
    }
 
    public T Next() 
    {
        T item = _items[_currentIndex];
        _currentIndex++;
        return item;
    }
}
 
public class ConcreteAggregate<T> : IAggregate<T> 
{
    private List<T> _items = new List<T>();
 
    public void AddItem(T item) 
    {
        _items.Add(item);
    }
 
    public IIterator<T> GetIterator() 
    {
        return new ConcreteIterator<T>(_items);
    }
}

👉二、处理者模式(Chain of Responsibility)

介绍:
‌Unity中的处理者模式‌主要指的是责任链模式,这是一种行为型设计模式,用于处理多个对象之间的请求传递和责任分配。在责任链模式中,请求者发送的请求会沿着处理者链进行传递,直到被处理。这种模式可以避免请求发送者与多个处理者之间的耦合,提高系统的灵活性和可维护性。

代码如下:

public abstract class Handler 
{
    protected Handler _successor;
 
    public void SetSuccessor(Handler successor) 
    {
        _successor = successor;
    }
 
    public abstract void HandleRequest(int request);
}
 
public class ConcreteHandlerA : Handler 
{
    public override void HandleRequest(int request) 
    {
        if (request >= 0 && request < 10) 
        {
            Debug.Log("Handled by Concrete Handler A");
        }
        else if (_successor != null)
        {
            _successor.HandleRequest(request);
        }
    }
}
 
public class ConcreteHandlerB : Handler 
{
    public override void HandleRequest(int request) 
    {
        if (request >= 10 && request < 20) 
        {
            Debug.Log("Handled by Concrete Handler B");
        }
        else if (_successor != null)
        {
            _successor.HandleRequest(request);
        }
    }
}
 
public class ConcreteHandlerC : Handler 
{
    public override void HandleRequest(int request) 
    {
        if (request >= 20 && request < 30) 
        {
            Debug.Log("Handled by Concrete Handler C");
        }
        else if (_successor != null)
        {
            _successor.HandleRequest(request);
        }
    }
}
 
public class Client
{
private Handler _handlerChain;
public Client() 
{
    _handlerChain = new ConcreteHandlerA();
    Handler handlerB = new ConcreteHandlerB();
    Handler handlerC = new ConcreteHandlerC();
    _handlerChain.SetSuccessor(handlerB);
    handlerB.SetSuccessor(handlerC);
}
 
public void ProcessRequests() 
{
    int[] requests = new int[] { 2, 17, 25, 40, 5 };
 
    foreach (int request in requests)
    {
        _handlerChain.HandleRequest(request);
    }
}
}

👉三、装饰者模式(Decorator)

介绍:
‌Unity中的装饰者模式‌是一种结构型设计模式,主要用于动态地给一个对象添加额外的功能,而不需要修改其原有的代码。这种模式在游戏中尤其有用,例如,可以为游戏角色添加不同的装备、技能等,而不需要修改角色的基本代码。

代码如下:

public abstract class Component 
{
    public abstract void Operation();
}
 
public class ConcreteComponent : Component 
{
    public override void Operation() 
    {
        Debug.Log("Concrete Component Operation");
    }
}
 
public abstract class Decorator : Component 
{
    private Component _component;
 
    public Decorator(Component component) 
    {
        _component = component;
    }
 
    public override void Operation() 
    {
        if (_component != null) 
        {
            _component.Operation();
        }
    }
}
 
public class ConcreteDecoratorA : Decorator 
{
    public ConcreteDecoratorA(Component component) : base(component) 
    {
    }
 
    public override void Operation() 
    {
        base.Operation();
        AddedBehavior();
        Debug.Log("Concrete Decorator A Operation");
    }
 
    private void AddedBehavior() 
    {
        Debug.Log("Added Behavior from Concrete Decorator A");
    }
}
 
public class ConcreteDecoratorB : Decorator 
{
    public ConcreteDecoratorB(Component component) : base(component) 
    {
    }
 
    public override void Operation() 
    {
        base.Operation();
        AddedBehavior();
        Debug.Log("Concrete Decorator B Operation");
    }
 
    private void AddedBehavior() 
    {
        Debug.Log("Added Behavior from Concrete Decorator B");
    }
}

👉四、组合模式(Composite)

介绍:
‌在Unity中,组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树形结构以表现“整体-部分”的层次结构,并且用户可以一致地处理单个对象和组合对象‌。
组合模式在Unity中的应用实例包括图形界面元素的组合。通过定义抽象的UIComponent接口,包含UIButton和UIMenu等具体组件,可以展示如何将单个对象和组合对象进行一致处理。例如,UIButton作为叶子节点不支持添加或删除子组件,而UIMenu作为组合节点则可以管理多个子组件。‌

代码如下:

public abstract class Component 
{
    protected string _name;
 
    public Component(string name) 
    {
        _name = name;
    }
 
    public abstract void Add(Component component);
    public abstract void Remove(Component component);
    public abstract void Display(int depth);
}
 
public class Leaf : Component 
{
    public Leaf(string name) : base(name) 
    {
    }
 
    public override void Add(Component component) 
    {
        Debug.Log("Cannot add to a leaf.");
    }
 
    public override void Remove(Component component) 
    {
        Debug.Log("Cannot remove from a leaf.");
    }
 
    public override void Display(int depth) 
    {
        Debug.Log(new string('-', depth) + " " + _name);
    }
}
 
public classComposite : Component
{
private List<Component> _children = new List<Component>();
public Composite(string name) : base(name) 
{
}
 
public override void Add(Component component) 
{
    _children.Add(component);
}
 
public override void Remove(Component component) 
{
    _children.Remove(component);
}
 
public override void Display(int depth) 
{
    Debug.Log(new string('-', depth) + " " + _name);
 
    foreach (Component component in _children)
    {
        component.Display(depth + 2);
    }
}
}

请添加图片描述

👉壁纸分享

请添加图片描述
请添加图片描述


👉总结

本次总结的就是unity常见的四种设计模式 有需要会继续增加功能
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!


原文地址:https://blog.csdn.net/qq_42603590/article/details/144193920

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!