












创建于 2024年5月7日 04:52:54 · 约1,023字
简单工厂和工厂一块放这里。 简单工厂在创建对象的时候通过工厂统一的创建对象,创建的时候指明要创建什么对象,这样可以在不用更改调用方,只更改创建方和创建行为就可以了。
Csharp
namespace DesignPatterns;
public enum MouseType
{
None,// 回忆一下enum
HpMouse,
LazerMouse
}
public class BaseMouse // 基础的鼠标类
{
public string Name;
public BaseMouse(string name)
{ this.Name = name;
}
public void MousePrint()
{ Console.WriteLine($"{Name} Printed!");
}}
public class HpMouse:BaseMouse
{
public HpMouse(string name) : base(name)
{ Console.WriteLine($"Create a HpMouse {Name}");
}
}
public class LazerMouse:BaseMouse
{
public LazerMouse(string name) : base(name)
{ Console.WriteLine($"Create a LazerMouse {Name}");
}
}
public class MouseSimpleFactory
{
private BaseMouse m = null;
public BaseMouse GetMouse(string name,MouseType MT)
{ switch (MT) // 每当多一个的时候就要多加一个,这是简单工厂
{
case (MouseType.None):
m = new BaseMouse(name); // 赋值的时候发生了向上转型
break;
case (MouseType.HpMouse):
m = new HpMouse(name);
break;
case (MouseType.LazerMouse):
m = new LazerMouse(name);
break;
default:
throw new Exception("输入的类型不合法");
break;
}
return m;
}}
//-------Main中-----
class Program
{
static void Main(string[] args)
{
Console.WriteLine("-----------------简单工厂模式-----------------");
MouseSimpleFactory mf = new MouseSimpleFactory();
BaseMouse bm=mf.GetMouse("新鼠标",MouseType.None); // 根据枚举(指定类型)返回指定的类型的子对象
bm.MousePrint();
BaseMouse hm=mf.GetMouse("新惠普鼠标",MouseType.HpMouse);
hm.MousePrint();
}}运行结果
-----------------简单工厂模式-----------------
新鼠标 Printed!
Create a HpMouse 新惠普鼠标
新惠普鼠标 Printed!简单工厂模式违反了开闭原则,需要修改原有的创建工厂而不是新增,工厂模式把每一种子类都单独创建一个对应类型的工厂,新的代码使用的时候直接调用对应的工厂而不是指明统一的工厂(这不就是是接口抽象吗)
单例设计模式
在unity中通常用在各种全局的 管理器 中,声音,唯一的角色管理器中,每次获得的都是这个东西,声音不会重复等。
保证一个类只有一个实例, 并提供一个访问该实例的全局节点,注意在多线程多进程环境下使用的时候会不会一个程序空间创建一个导致多次创建。
new运算符。Csharp
namespace DesignPatterns;
public class SingletonPrac
{
private SingletonPrac()
{ Console.WriteLine("create a SingletonPrac instance");
} // static SingletonPrac instance = null; // 实际上不在类里面,而在堆中
// 如果换成下面这行就是饿汉模式,类在堆初始化的时候就创建一次
static SingletonPrac instance = new SingletonPrac();
public static SingletonPrac GetInstance()
{ if (instance == null) //懒汉模式
{
instance = new SingletonPrac();
} return instance;
}
public void Show()
{ Console.WriteLine($"SingletonPrac intance id: {this.GetHashCode()}"); // GetHashCode就是返回对象的哈希码,对象在内存中唯一的哈希码
}
}
//-------Main中-----
class Program
{
static void Main(string[] args)
{
Console.WriteLine("-----------------单例模式-----------------");
SingletonPrac s1 = SingletonPrac.GetInstance();
SingletonPrac s2 = SingletonPrac.GetInstance();
SingletonPrac s3 = SingletonPrac.GetInstance();
s1.Show();s2.Show();s3.Show();
}}运行结果
-----------------单例模式-----------------
create a SingletonPrac instance
SingletonPrac intance id: 32854180
SingletonPrac intance id: 32854180
SingletonPrac intance id: 32854180此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。