根据XX对XX产生行为的方法(角色对应武器)

可以用委托来搞定 

using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;

public delegate void u3d(string name);//创建一个委托,用来放绘制的方法
   public class DM02Brridge:MonoBehaviour
    {
    private void Start()
    {
        u3d AA = new DirectX().Render ;//实例化Dir.把其中的Render方法放进去
        Sphere l_Sphere = new Sphere(); //实例化球体的脚本
        l_Sphere.Draw(new DirectX().Render);//球体脚本.其中的Draw方法(把执行哪条方法丢进去)
        l_Sphere.Draw(new OpenGL().Render);
        Cube l_Cube = new Cube();
        l_Cube.Draw();
    }

}

public class Sphere //球体的类,有自己的属性
{
    public string name = "Sphere";
    public OpenGL openGL = new OpenGL();

    public void Draw(u3d AA)//这样可以调用进来的方法,然后把本脚本的内容放过去.
    {
        AA(name);
    }
}
public class OpenGL//绘制的引擎
{
    public void Render(string name)
    {
        Debug.Log("OpenGL绘制了:" + name);
    }

}
public class Cube //球体的类,有自己的属性
{
    public string name = "Cube";
    public OpenGL openGL = new OpenGL();

    public void Draw()
    {
        openGL.Render(name);
    }
}
public class DirectX
{
    public void Render(string name)
    {
        Debug.Log("DrectX绘制了:" + name);
    }
}

也可以使用父类为接口继承的方法----桥接模式

父1-----子1

父2-----子2

调用父1,父1的类中创建父2...

这样调用父1后,所有的都可以调用实现

 

using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;

public delegate void u3d(string name);
   public class DM02Brridge:MonoBehaviour
    {
    private void Start()
    {
        EngineSystem AA = new OpenGL();//父对象类型,实例化子对象
        Cube BB = new Cube(AA);
        BB.Draw();
        AA = new DirectX();
        Sphere SP = new Sphere(AA);
        SP.Draw();
    }

}
public class IHshaPe //类型总类
{
    public string name; //字段名,让图形子类去直接赋值
    public EngineSystem Eng;//引擎总类,让引擎分类被实例化的时候复制
    public IHshaPe(EngineSystem l_eng)//让实例化后的括号里写入用何种引擎
    {
        Eng = l_eng;
    }
    public void Draw()//子类共有的方法,让父类来写!
    {
        Eng.DrawEng(name);   //引擎总类里的那个(目前是唯一)的方法
    }
}
public abstract class EngineSystem//引擎总类
{
    public abstract void DrawEng(string name);//Eng..根据其中的值,去找下面的子类中的方法..DrawEng..子类中同名的方法(赋值的内容)
}

public class Sphere : IHshaPe //图形类都继承图形总类
{

    public Sphere(EngineSystem l_eng) : base(l_eng)
    {
        base.name = "Sphere";
    }
}
public class OpenGL:EngineSystem
{
    public override void DrawEng(string name)
    {
        Debug.Log("OpenGL绘制了:" + name);
    }

}
public class Cube:IHshaPe 
{


    public Cube(EngineSystem l_eng) : base(l_eng)
    {
        name = "Cube";
    }

}
public class DirectX:EngineSystem//引擎都继承引擎总类
{
    public override void DrawEng(string name)
    {
        Debug.Log("DrectX绘制了:" + name);
    }
}

 

posted @ 2017-08-30 21:58  sign尊者  阅读(282)  评论(3编辑  收藏  举报