• 管窥WOWUIInterface代码


    管窥WOWUIInterface代码


    Template 模板

    UIInterface中预设了一些的基础|通用的Template来到处使用,保证了各处功能的统一和制作中的复用

    事件
    1. 游戏事件
      UIInterface只是GameLogic外边的一层皮,GameLogic是UIInterface的核,所有的游戏数据由事件通知到这层皮上面,UIInterface再通过API获取游戏数据来新事件自己的功能.
    2. 用户输入事件
      和其他一样
    继承实现

    Lua代码中以Mixin的方式实现继承,代码只是简单的拷贝成员对象的域中.代码如下:

    -- where ... are the mixins to mixin
    function Mixin(object, ...)
    	for i = 1, select("#", ...) do
    		local mixin = select(i, ...);
    		for k, v in pairs(mixin) do
    			object[k] = v;
    		end
    	end
    
    	return object;
    end
    
    -- where ... are the mixins to mixin
    function CreateFromMixins(...)
    	return Mixin({}, ...)
    end
    

    关于正确的理解Mixin的含义可以阅读下面的链接,尤其应该阅读Dart语言阐述Mixin那一篇.
    对于习惯于JAVAC#这样接口实现变相多重继承的语言,总是有人说Mixin是带有默认实现的接口,在我理解来,Mixin接口显然是有区别的:

    1. 接口不能带有字段,只能有函数成员
    public interface foo
    {
        int value; // error  接口不能带有字段,而Mixin则可以.Mixin意味着将`父类`的东西都包含到对象中
    }
    
    
    1. 接口不能保证单一
    public interface IHander1
    {
        void OnMsg();
    }
    
    public interface IHander2
    {
        int OnMsg(int a);
    }
    
    public class Obj : IHander1, IHander2
    {
        public void OnMsg()
        {
        }
    
        public int OnMsg(int a)  // 需要分别实现2个接口, 且如果要是俩个接口的前面在特定情况下一致还实现不了.
        {                        // Mixin则不会,混入的方法是唯一的.按线性覆盖
            return 0;
        }
    }
    

    总之,Mixin接口显然不是同样的东西,虽然代码上可以互相代替,但是正确理解概念是很重要的,不同的概念代表了不同思考方式.
    接口的滥用也是很难受的一件事,特别是有的接口看起来就想对象一样(无论从命名还是实现 IFucker).

    • 继承描述的关系是: is-a, 描述的是A is B 的关系
    • 接口描述的是: able, 描述的是不同类之间有相同的能力,是共性
    • Mixin是: included, 描述的包含关系,A include b,c,d

    引发:Mixin是否更贴合组合的概念?假如将[译]Dart | 什么是Mixin文章中类名改下名字
    walker=>foot, swimmer => fin, flyer => wing,修改后感觉理解起来太像组合了.只能不能去Mixin...

    Wiki - Mixin
    知乎 - Mixin是什么概念?
    [译]Dart | 什么是Mixin

    函数保护
    1. 在第三方代码中,对Game核心功能代码做了保护,无法在第三方代码中执行受保护的函数
    2. 在UI上也做了一些保护,在战斗中一些界面会和非战斗中行为不一致
  • 相关阅读:
    JdbcTemplate增删改查案例
    顾问和注解
    使用多种方式实现AOP
    面试题
    Spring Bean的生命周期和作用域
    IOC和AOP交互拓展(二)
    AOP
    错题
    Spring核心概念
    hadoop-MapReduce框架原理之OutputFormat数据输出
  • 原文地址:https://www.cnblogs.com/Fallever/p/14037813.html
Copyright © 2020-2023  润新知