门面模式:将各种不同类型的东西聚合,形成特定的功能。
public class MenMianTest : MonoBehaviour
{
public GameObject redGam;
public GameObject greenGam;
Button button;
bool isRed=false;
// Start is called before the first frame update
void Start()
{
button = GetComponent<Button>();
button.onClick.AddListener(new UnityEngine.Events.UnityAction(OnClick));
}
public void ShowRed()
{
redGam.SetActive(true);
greenGam.SetActive(false);
}
public void ShowGreen()
{
redGam.SetActive(false);
greenGam.SetActive(true);
}
public void OnClick()
{
if (isRed)
{
ShowRed();
isRed = false;
}
else {
ShowGreen();
isRed = true;
}
组合模式:将相同类型的东西聚合在一起,形成特有的功能
public class BaseCube
{
public virtual void Walk_Forward() { }
public virtual void Walk_Backward() { }
}
public class Cube1 : BaseCube
{
public override void Walk_Backward()
{
GameObject gameObject = GameObject.FindGameObjectWithTag("Cube");
gameObject.transform.Translate(1, 0, 0);
}
public override void Walk_Forward()
{
}
}
public class Cube2 : BaseCube
{
public override void Walk_Backward()
{
GameObject gameObject = GameObject.FindGameObjectWithTag("Cube1");
gameObject.transform.Translate(-1, 0, 0);
}
public override void Walk_Forward()
{
}
}
public class Cube3 : BaseCube
{
public override void Walk_Backward()
{
GameObject gameObject = GameObject.FindGameObjectWithTag("Cube2");
gameObject.transform.Translate(0, 1, 0);
}
public override void Walk_Forward()
{
}
}
public class ZuHeTest : MonoBehaviour
{
List<BaseCube> baseCubes;
// Start is called before the first frame update
void Start()
{
baseCubes = new List<BaseCube>();
Cube1 cube1 = new Cube1();
Cube2 cube2 = new Cube2();
Cube3 cube3 = new Cube3();
baseCubes.Add(cube1);
baseCubes.Add(cube2);
baseCubes.Add(cube3);
}
// Update is called once per frame
void Update()
{
// if (Input.GetKeyDown(KeyCode.Space))
for (int i = 0; i < baseCubes.Count; i++)
{
baseCubes[i].Walk_Backward();
}
}
}