数据结构 + 设计模式+简单工厂+工厂方法 知识点总结

数据结构就是数据之间的关系

**线性表:
1.顺序表 --> List 方便查找、遍历、追加
2.链表 --> 方便插入和删除
3.栈 --> stack FILO 先进后出
4.队列 --> Queue FIFO 先进先出
5.字典 --> Dictionary<> 键值对组合 键是唯一的

栈 : 受限制的线性表
Pop : 出栈
Peek : 返回栈顶元素
Push : 压栈

队列 : 受限制的线性表
EnQueue : 入队
DeQueue : 出队
Peek : 返回队首元素

字典 --> Key : Value
字典是无序的 不存在插入和索引
Dictionary<string,string> myDictionary = new Dictionary<string,string>();
myDictionary.Add(Key,Value); //添加进字典
myDictionary.Remove(Key); //删除对应的Key键 若为false 则无该Key键
myDictionary[Key] = x; //修改key对应的value值
遍历字典必须用foreach
PlayerPrefs --> 变相的字典
**

设计模式

设计原则:高内聚,低耦合

单一原则 : 累的职责单一,对外只提供一种功能
开闭原则 : 累的改动是通过增加代码,而不是修改源代码
里式替换原则 : 任何抽象类出现的地方都可以用其子类代替
依赖倒转原则 : 以来抽象(接口),不依赖具体显示类
迪米特原则 : 多组合,少继承
合成复用原则 : 多组合

  1. 单例模式: 懒汉和饿汉(直接就new 线程相对安全) 但是在unity不涉及多线程, 所以都行 一般人们写的懒汉多一点
    1. 普通class
    2. 里面一个私有的 静态属性 对象
    3. 私有构造函数
    4. 共有 静态 对象返回值类型的 方法(GetInstance/GetInit)
    5. GetInstance 进行new
  2. 简单工厂:
    1. 抽象父类
    2. 子类继承并重写父类
    3. 工厂接受参数 并new对应的子类 返回类型是抽象父类
    4. 工厂方法里面就是switch结构
    6. 违背了开闭原则
  3. 工厂方法:
    1. 定义抽象工厂(返回值是抽象父类)和抽象父类
    2. 一个物体就佩戴一个工厂
  4. 中介者模式
    1. MVC 卖家 买家 淘宝

简单工厂方法

以生产手机为例

定义一个抽象类抽象方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 简单工厂模式
{
     public abstract class GetPhotoName//抽象类
    {
        public string PhotoName;
        public abstract void show();//抽象方法
    }
}

定义工厂

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 简单工厂模式
{
    public class FSK
    {
        //静态方法,返回类型GetPhotoName
        public static GetPhotoName CreatPhoneByName(string PhoneName)
        {
            GetPhotoName retunValue;
            switch (PhoneName)//判断
            {
                case "mi":
                    retunValue = new Apple();//调用子类
                    retunValue.PhotoName = "MIMIX3";//调用父类属性并赋值
                    return retunValue;
                case "apple":
                    retunValue = new MiMix3();
                    retunValue.PhotoName = "AppleXS";
                    return retunValue;
            }
            return null;
        }
    }
}

定义实现类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 简单工厂模式
{
    class Apple:GetPhotoName//实现类

    {
        public override void show()
        {
            Console.WriteLine("我是图片{0}",PhotoName);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 简单工厂模式
{
    class MiMix3:GetPhotoName//继承自抽象类
    {
        public override void show()//实现类
        {
            Console.WriteLine("我是图片{0}",PhotoName);
        }
    }
}

定义主类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 简单工厂模式
{
    class Program
    {
        static void Main(string[] args)
        {
            //实例化creatPhone=FSK.CreatPhoneByName方法的返回值.
            GetPhotoName creatPhone = FSK.CreatPhoneByName("apple");
            creatPhone.show();//调用show方法
            Console.ReadLine();
        }
    }
}

工厂方法

工厂方法是一个物品对应一个工厂! 实现自给自足

namespace 工厂方法
{
    public abstract class AbsFac//定义抽象工厂
    {

        public abstract AbsPhone CreatePhone();//抽象方法
    }
}
namespace 工厂方法
{
    public abstract class AbsPhone//定义抽象手机类
    {
        public  abstract void Show();//抽象方法
    }
}
namespace 工厂方法
{
    public class HuaWeiFac: AbsFac//实现类,继承自抽象工厂
    
    {
        public override AbsPhone CreatePhone()
        {
            
            return  new HuaWei();
        }
    }
}
namespace 工厂方法
{
    public class HuaWei: AbsPhone
    
    {
        public override void Show()
        {
            Console.WriteLine("我是华为手机");
        }
    }
}
namespace 工厂方法
{
    class Program
    {
        static void Main(string[] args)
        {
            AbsFac HUAWEI = new HuaWeiFac();
            AbsPhone huawei = HUAWEI.CreatePhone();
            huawei.show();
            Console.ReadLine();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43140883/article/details/83548424
今日推荐