IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> C#---高级|设计模式(1) -> 正文阅读

[游戏开发]C#---高级|设计模式(1)

【千锋合集】史上最全Unity3D全套教程|匠心之作_哔哩哔哩_bilibili

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#region old
public class Animal : MonoBehaviour {
? ? public string name;
? ? public Animal(string name) {
? ? ? ? this.name = name;
? ? }
? ? public void ?Shout() {
? ? ? ? if (name == "鸟") {
? ? ? ? ? ? Debug.Log("吱吱吱");
? ? ? ? }
? ? ? ? else if (name=="猫") {
? ? ? ? ? ? Debug.Log("喵喵喵");
? ? ? ? }
? ? }
}
#endregion
#region New
public class NewAnimal {
? ? public string name;
? ? public NewAnimal(string name) {
? ? ? ? this.name = name;
? ? }
? ? public virtual void Shout() {

? ? }
}

public class Cat : NewAnimal {
? ? public Cat(string name) : base(name) { }
? ? public override void Shout()
? ? {
? ? ? ? base.Shout();
? ? ? ? Debug.Log("喵喵喵");
? ? }
}

public class Bird : NewAnimal
{
? ? public Bird(string name) : base(name) { }
? ? public override void Shout()
? ? {
? ? ? ? base.Shout();
? ? ? ? Debug.Log("吱吱吱");
? ? }
}

public class Dog : NewAnimal
{
? ? public Dog(string name) : base(name) { }
? ? public override void Shout()
? ? {
? ? ? ? base.Shout();
? ? ? ? Debug.Log("汪汪汪");
? ? }
}

#endregion
?

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

public class SRPConsole : MonoBehaviour {

? ? #region Old
? ? // Use this for initialization
? ? void OldStart () {
? ? ? ? Animal bird=new Animal("鸟");
? ? ? ? bird.Shout();//吱吱吱
? ? ? ? Animal cat = new Animal("猫");
? ? ? ? cat.Shout();
?? ?}
? ? #endregion

? ? #region New
? ? void Start()
? ? {
? ? ? ? Cat cat = new Cat("mimi");
? ? ? ? cat.Shout();
? ? ? ? Dog dog = new Dog("旺财");
? ? ? ? dog.Shout();

? ? }
? ? #endregion

}
?

?子类必须有自己的行为和特征

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#region Old
public class GameRole : MonoBehaviour {
? ? public string name;
? ? public GameRole(string name) {
? ? ? ? this.name = name;
? ? }
? ? public void Talk(GameRole otherGameRole) {
? ? ? ? Debug.Log(name+"正在和"+otherGameRole+"进行谈话。。。");
? ? }
? ? public virtual void Attack(GameRole otherGameRole) {
? ? ? ? Debug.Log(name+"正在攻击"+otherGameRole);
? ? }?? ?
}
public class Hero : GameRole
{
? ? public Hero(string name) : base(name)
? ? {
? ? }
}


public class NPC : GameRole
{
? ? public NPC(string name) : base(name)
? ? {
? ? }
? ? public override void Attack(GameRole otherGameRole) {
? ? ? ? Debug.Log("当前角色不能攻击。。");
? ? ? ? throw new System.Exception();
? ? }
}
#endregion
#region New
public class NewGameRole {
? ? public string name;
? ? public NewGameRole(string name)
? ? {
? ? ? ? this.name = name;
? ? }
? ? public void Talk(NewGameRole otherGameRole)
? ? {
? ? ? ? Debug.Log(name + "正在和" + otherGameRole + "进行谈话。。。");
? ? }
}
public class CanAttackGameRole : NewGameRole
{
? ? public CanAttackGameRole(string name) : base(name)
? ? {
? ? }
? ? public void Attack(NewGameRole otherGameRole)
? ? {
? ? ? ? Debug.Log(name + "正在攻击" + otherGameRole);
? ? }
? ? public NewGameRole otherGameRole;
? ? public void BuyEquip() { }


}

public class NewNPC : NewGameRole
{
? ? public NewNPC(string name) : base(name)
? ? {
? ? }
}

#endregion
?

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

public class LSPConsole : MonoBehaviour {
? ? #region old
? ? private void Awake()
? ? {
? ? ? ? Hero angel = new Hero("Angle");
? ? ? ? NPC shopNPC = new NPC("ShopNPC");
? ? ? ? //shopNPC.Attack(angel);
? ? ? ? GameRoleAttack(shopNPC); //问此时会不会抛出异常?
? ? ? ? //向上转型
? ? ? ? //GameRole gameRole = shopNPC;
? ? }
? ? public void GameRoleAttack(GameRole gameRole) {
? ? ? ? //调用的是父类
? ? ? ? gameRole.Attack(new GameRole("机器人"));
? ? }
? ? #endregion
? ? #region New
? ? //private void Start()
? ? //{
? ? // ? ?NewNPC shopNPC = new NewNPC("ShopNPC");
? ? ? ??
? ? // ? ?CanAttackGameRole hero = new CanAttackGameRole("德玛西亚");
? ? // ? ?shopNPC.Talk(hero);
? ? // ? ?hero.otherGameRole = shopNPC;
? ? // ? ?hero.Attack(hero);
? ? //}
? ? #endregion
}
?

?一个类只与尽量少的类有联系

?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#region Old
//School依赖Class和Student
public class School{
? ? List<Class> classes;
? ? public string name;
? ? public School(string name, List<Class> classes) {
? ? ? ? this.name = name;
? ? ? ? this.classes=classes;
? ? }
? ? public void Show() {
? ? ? ? Debug.Log("我们学校是:"+name);
? ? ? ? Debug.Log("我们的班级有:");
? ? ? ? for (int i=0;i<classes.Count;i++) {
? ? ? ? ? ? //获取当前班级
? ? ? ? ? ? Class @class = classes[i];
? ? ? ? ? ? Debug.Log(@class.name);
? ? ? ? ? ? Debug.Log("该班学生有:");
? ? ? ? ? ? for (int j = 0; j < @class.students.Count; j++) {
? ? ? ? ? ? ? ? //获取当前学术
? ? ? ? ? ? ? ? Student @student = classes[i].students[j];
? ? ? ? ? ? ? ? Debug.Log(@student.studentName);
? ? ? ? ? ? }
? ? ? ? }
? ? }
}

public class Class {
? ? public List<Student> students;
? ? public string name;
? ? public Class(string name, List<Student> students)
? ? {
? ? ? ? this.name = name;
? ? ? ? this.students = new List<Student>();
? ? }
? ? public void Show()
? ? {
? ? ? ? //Debug.Log("我们班级是:" + name);
? ? }
}

public class Student {
? ? public string studentName;
? ? public Student(string name)
? ? {
? ? ? ? this.studentName = name;
? ? }
? ? public void Show()
? ? {
? ? ? ? //Debug.Log("我们是:" + studentName);
? ? }
}
#endregion

#region New
//NewSchool只依赖与Class
public class NewSchool {
? ? List<NewClass> newClasses;
? ? public string name;
? ? public NewSchool(string name, List<NewClass> newClasses) {
? ? ? ? this.name = name;
? ? ? ? this.newClasses = newClasses;
? ? }
? ? public void Show() {
? ? ? ? Debug.Log("我们学校是:" + name);
? ? ? ? for (int i = 0; i < newClasses.Count; i++) {
? ? ? ? ? ? //班级介绍
? ? ? ? ? ? newClasses[i].Show();
? ? ? ? }
? ? }
}

public class NewClass {
? ? public string name;
? ? List<NewStudent> newStudents;
? ? public NewClass(string name, List<NewStudent> newStudents)
? ? {
? ? ? ? this.name = name;
? ? ? ? this.newStudents=newStudents;
? ? }
? ? public void Show() {
? ? ? ? Debug.Log("我们班级是:" + name);
? ? ? ? for (int i=0;i<newStudents.Count;i++) {
? ? ? ? ? ? newStudents[i].Show();
? ? ? ? }
? ? }
}
public class NewStudent {
? ? public string name;
? ? public string hobby;?
? ? public NewStudent(string name,string hobby)
? ? {
? ? ? ? this.name = name;
? ? ? ? this.hobby = hobby;
? ? }
? ? public void Show() {
? ? ? ? Debug.Log("我们是:" + name);
? ? ? ? Debug.Log("我的爱好是:" + hobby);
? ? }
}

#endregion

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

public class LKPConsole : MonoBehaviour { ??
? ? private void Start()
? ? {
? ? ? ? #region Old

? ? ? ? School school = new School("一高",
? ? ? ? ? ? new System.Collections.Generic.List<Class>() {
? ? ? ? ? ? new Class("三年一班",
? ? ? ? ? ? ? ? new System.Collections.Generic.List<Student>() {
? ? ? ? ? ? ? ? ? ? new Student("一班小王"), new Student("一班小李") }),
? ? ? ? ? ? new Class("三年二班",
? ? ? ? ? ? ? ? new System.Collections.Generic.List<Student>() {
? ? ? ? ? ? ? ? ? ? new Student("二班小吴"), new Student("一班小可")})
? ? ? ? ? ? }
? ? ? ? ? ? );
? ? ? ? school.Show();
? ? }

? ? #endregion

}

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


/// <summary>
/// 遵循依赖倒置原则,全部都依赖于抽象
/// </summary>
namespace DIP {
? ? public abstract class PhoneUser {
? ? ? ? public string name;
? ? ? ? public PhoneUser(string name) {
? ? ? ? ? ? this.name = name;
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 抽象方法
? ? ? ? /// </summary>
? ? ? ? public abstract void PlayPhone(Phone phone);
? ? }

? ? public abstract class Phone {
? ? ? ? public string name;
? ? ? ? public string owner;
? ? ? ? public Phone(string name,string owner)
? ? ? ? {
? ? ? ? ? ? this.name = name;
? ? ? ? ? ? this.owner = owner;
? ? ? ? }
? ? ? ? public abstract void Call(Phone other);
? ? ? ? public abstract void Message(Phone other);
? ? ? ? public abstract void PlayGame();
? ? ? ? public abstract void EnjoyMusic();
? ? }

? ? public class Student : PhoneUser
? ? {
? ? ? ? public Student(string name) : base(name)
? ? ? ? {
? ? ? ? }

? ? ? ? public override void PlayPhone(Phone phone)
? ? ? ? {
? ? ? ? ? ? Debug.Log("学生"+name+"正在玩手机-->"+phone.name);
? ? ? ? ? ? phone.PlayGame();
? ? ? ? }
? ? }

? ? public class Programmer : PhoneUser
? ? {
? ? ? ? public Programmer(string name) : base(name)
? ? ? ? {
? ? ? ? }

? ? ? ? public override void PlayPhone(Phone phone)
? ? ? ? {
? ? ? ? ? ? Debug.Log("程序员" + name + "正在玩手机-->" + phone.name);
? ? ? ? ? ? phone.PlayGame();
? ? ? ? }
? ? }


? ? public class Iphone : Phone
? ? {
? ? ? ? public Iphone(string name, string owner) : base(name, owner)
? ? ? ? {
? ? ? ? }

? ? ? ? public override void Call(Phone other)
? ? ? ? {
? ? ? ? ? ? Debug.Log("正在使用iPhone打电话给"+other.owner);
? ? ? ? }

? ? ? ? public override void EnjoyMusic()
? ? ? ? {
? ? ? ? ? ? Debug.Log("正在使用iPhone听音乐");
? ? ? ? }

? ? ? ? public override void Message(Phone other)
? ? ? ? {
? ? ? ? ? ? Debug.Log("正在使用iPhone发短信给" + other.owner);
? ? ? ? }

? ? ? ? public override void PlayGame()
? ? ? ? {
? ? ? ? ? ? Debug.Log("正在使用iPhone玩游戏");
? ? ? ? }
? ? }


? ? public class HuaWeiPhone : Phone
? ? {
? ? ? ? public HuaWeiPhone(string name, string owner) : base(name, owner)
? ? ? ? {
? ? ? ? }

? ? ? ? public override void Call(Phone other)
? ? ? ? {
? ? ? ? ? ? Debug.Log("正在使用HuaWeiPhone打电话给" + other.owner);
? ? ? ? }

? ? ? ? public override void EnjoyMusic()
? ? ? ? {
? ? ? ? ? ? Debug.Log("正在使用HuaWeiPhone听音乐");
? ? ? ? }

? ? ? ? public override void Message(Phone other)
? ? ? ? {
? ? ? ? ? ? Debug.Log("正在使用HuaWeiPhone发短信给" + other.owner);
? ? ? ? }

? ? ? ? public override void PlayGame()
? ? ? ? {
? ? ? ? ? ? Debug.Log("正在使用HuaWeiPhone玩游戏");
? ? ? ? }
? ? }
}
?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DIP;
public class DIPConsole : MonoBehaviour {

? ? #region use DIP
? ? private void Start()
? ? {

? ? ? ? //手机用户
? ? ? ? //PhoneUser phoneUser;
? ? ? ? //Phone iphone;
? ? ? ? //Phone miPhone;
? ? ? ? //Phone huaweiPhone;
? ? ? ? Phone myiPhone =new Iphone("xiaohong的iPhone","xiaohong");
? ? ? ? Phone myHuaWeiPhone = new HuaWeiPhone("xiaomei的HuaWeiPhone", "xiaomei");
? ? ? ? PhoneUser phoneUser = new DIP.Student("xiaoming");
? ? ? ? UserPlayPhone(phoneUser,myiPhone); ? ? ?
? ? }
? ? #endregion

? ? #region DIP Extend Method
? ? /// <summary>
? ? /// 用户使用手机
? ? /// </summary>
? ? /// <param name="phoneUser"></param>
? ? /// <param name="phone"></param>
? ? public void UserPlayPhone(PhoneUser phoneUser,Phone phone) {
? ? ? ? phoneUser.PlayPhone(phone);
? ? }
? ? #endregion?
}
?

维护性好

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace ISP {

? ? public interface IBaseMobilePhone {
? ? ? ? void Call();
? ? ? ? void Message();
? ? }
? ? public interface IMP3 {
? ? ? ? void Music();
? ? }
? ? public interface IMP4{
? ? ? ? void Movie();
? ? }
? ? public interface IGameMachine {
? ? ? ? void Game();
? ? }
? ? public interface ICamera {
? ? ? ? void Camera();
? ? }
? ? public interface INetwork {
? ? ? ? void Support4G();
? ? }

? ? public interface IMobileSmartPhone:IBaseMobilePhone,IMP3,IMP4,IGameMachine,ICamera,INetwork
? ? { ? ? ? ? ?
? ? ? ? ? ? ??
? ? }


? ? public class IMobileIPhone : IBaseMobilePhone, IMP3, IMP4, IGameMachine, ICamera
? ? {
? ? ? ? public void Call()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Call");
? ? ? ? }

? ? ? ? public void Camera()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Camera");
? ? ? ? }

? ? ? ? public void Game()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Game");
? ? ? ? }

? ? ? ? public void Message()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Message");
? ? ? ? }

? ? ? ? public void Movie()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Movie");
? ? ? ? }

? ? ? ? public void Music()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Music");
? ? ? ? }
? ? }
? ? public class MobileOldManPhone : IBaseMobilePhone
? ? {
? ? ? ? public void Call()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Call");
? ? ? ? }

? ? ? ? public void Message()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Message");
? ? ? ? }
? ? }
? ? public class HongMiPhone : IBaseMobilePhone, ICamera, IMP3
? ? {
? ? ? ? public void Call()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Call");
? ? ? ? }

? ? ? ? public void Camera()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Camera");
? ? ? ? }

? ? ? ? public void Message()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Message");
? ? ? ? }

? ? ? ? public void Music()
? ? ? ? {
? ? ? ? ? ? Debug.Log("Music");
? ? ? ? }
? ? }
? ? public class MobileIPhone3G : IMobileIPhone {
? ? ? ? public MobileIPhone3G() { ? ? ? ? ??
? ? ? ? ? ? Game();
? ? ? ? ? ? Music();
? ? ? ? ? ? Camera();
? ? ? ? }
? ? }
? ? public class MobileIPhoneX : IMobileIPhone, INetwork
? ? {
? ? ? ? public void Support4G()
? ? ? ? {
? ? ? ? ? ? throw new System.NotImplementedException();
? ? ? ? }
? ? ? ? public void SendMessageByWeChat(INetwork terminal) {

? ? ? ? }
? ? }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ISP;

public class ISPConsole : MonoBehaviour {
? ? private void Start()
? ? {
? ? ? ? IMobileIPhone MobileIPhone = new MobileIPhoneX();
? ? ? ? //传入实现接口的所有子类对象
? ? ? ? ShowDatas(new List<string>());
? ? ? ? ShowDatas(new string[] { "a", "b" });
? ? }
? ? public void ShowDatas(IList<string> datas) {

? ? }?? ?
}
?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class OCPConsole : MonoBehaviour {
? ? public Button button;
? ? private void Start()
? ? {
? ? ? ? //第一天
? ? ? ? button.onClick.AddListener(ShowMe);
? ? ? ? //第二天
? ? ? ? button.onClick.RemoveAllListeners();

? ? }
? ? public void ShowMe() {
? ? ? ? Debug.Log("我是小明");
? ? }
}
?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:37:40  更:2021-12-15 18:39:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:34:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码