目錄前言學習參考過程總結: 前言 做個自由仔。 學習參考 ChatGpt; https://www.cnblogs.com/zhili/p/DesignPatternSummery.html(大佬的,看了好多次) 過程 原由: 一開始只是想查查鏈式調用原理,以為是要繼承什麼介面,實現什麼方法才可以實 ...
目錄
前言
做個自由仔。
學習參考
過程
- 原由:
一開始只是想查查鏈式調用原理,以為是要繼承什麼介面,實現什麼方法才可以實現;像實現foreach一樣;一查好簡單;哎~,是平時思考少了;成代碼機器了,我冒昧了。
public class Person
{
private string _name;
private int _age;
public Person SetName(string name)
{
_name = name;
return this; // 返回當前對象以支持鏈式調用
}
public Person SetAge(int age)
{
_age = age;
return this; // 返回當前對象以支持鏈式調用
}
public void Display()
{
Console.WriteLine($"Name: {_name}, Age: {_age}");
}
}
//調用:
Person person = new Person();
// 鏈式調用示例
person.SetName("John")
.SetAge(30)
.Display();
- 然後我就看到了構建器模式;又一次理解了一次(抱歉以前的忘了;)
然後又問了問優點,適用場景;
優點:
- 可讀性高: 構建器模式使代碼更加易讀,特別是在創建複雜對象時。
- 靈活性: 可以很容易地添加或刪除屬性,而不需要更改客戶端代碼。
- 不可變對象: 通過構建器模式可以創建不可變對象(所有屬性在對象創建後都不能更改),提高了代碼的可靠性。
適用場景:
- 需要創建的對象具有很多可選參數時。
- 對象的構建過程複雜時,例如需要分步驟進行初始化。
- 需要確保對象在創建時是有效的,並且不希望對象在創建後改變。
說實話,一開始我是沒理解這個靈活性的,因為我想到了直接傳遞一個參數實體;
那豈不更方便,結果後面給我說常常是兩者結合,來構建複雜的對象;好吧;
還有那個可讀性;這樣,我的對象初始化也可以呀(new person{})
public class Person
{
private string _name;
private int _age;
private string _address;
private Person() { }
public class Builder
{
private Person _person = new Person();
public Builder SetName(string name)
{
_person._name = name;
return this;
}
public Builder SetAge(int age)
{
_person._age = age;
return this;
}
public Builder SetAddress(string address)
{
_person._address = address;
return this;
}
public Person Build()
{
// 可以在這裡添加對象驗證邏輯
// 如:if (string.IsNullOrEmpty(_person._name))
// throw new InvalidOperationException("Make cannot be null or empty");
return _person;
}
}
}
//調用:
Person person = new Person.Builder()
.SetName("John")
.SetAge(30)
.SetAddress("123 Main St")
.Build();
Console.WriteLine($"Name: {person._name}, Age: {person._age}, Address: {person._address}");
// 輸出: Name: John, Age: 30, Address: 123 Main St
-------------------------------------------------------------------
//使用參數對象
public class PersonParameters
{
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
public class Person
{
private string _name;
private int _age;
private string _address;
private Person() { }
public class Builder
{
private PersonParameters _parameters = new PersonParameters();
public Builder SetName(string name)
{
_parameters.Name = name;
return this;
}
public Builder SetAge(int age)
{
_parameters.Age = age;
return this;
}
public Builder SetAddress(string address)
{
_parameters.Address = address;
return this;
}
public Person Build()
{
//構造對象初始化
Person _person=new Person
{
Name=_parameters.Name,
Age=_parameters.Age,
Name=_parameters.Name,
}
return _person;
}
}
}
- 後面我就想到了Serilog;那個初始化好像就是鏈式的;構建器模式耶;(主機構建哪裡都是,抱歉了)
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
- 接著我繼續問:.MinimumLevel.Debug() 這裡的MinimumLevel是一個類;而Debug()是一個靜態方法麽;
我是想的MinimumLevel靜態類,Debug()是一個靜態方法;
好吧我的想法是錯的;是中間加了一個類來設置一些信息;或者中間類的擴展方法來的
public class LoggerConfiguration
{
public LoggerMinimumLevelConfiguration MinimumLevel { get; }
public LoggerSinkConfiguration WriteTo { get; }
// 其他配置方法和屬性...
public LoggerConfiguration()
{
MinimumLevel = new LoggerMinimumLevelConfiguration(this);
WriteTo = new LoggerSinkConfiguration(this);
}
}
public class LoggerMinimumLevelConfiguration
{
private readonly LoggerConfiguration _loggerConfiguration;
public LoggerMinimumLevelConfiguration(LoggerConfiguration loggerConfiguration)
{
_loggerConfiguration = loggerConfiguration;
}
public LoggerConfiguration Debug()
{
_loggerConfiguration.MinimumLevelControlledBy(new LoggingLevelSwitch(LogEventLevel.Debug));
return _loggerConfiguration;
}
// 其他級別設置方法...
}
----------
//,WriteTo.Console()
//使用擴展方法
public static class LoggerSinkConfigurationExtensions
{
public static LoggerConfiguration Console(this LoggerSinkConfiguration sinkConfiguration)
{
//列印
return sinkConfiguration.Sink(new ConsoleSink());
}
// 其他擴展方法...
}
//使用中間類
public class LoggerSinkConfiguration
{
private readonly LoggerConfiguration _loggerConfiguration;
public LoggerSinkConfiguration(LoggerConfiguration loggerConfiguration)
{
_loggerConfiguration = loggerConfiguration;
}
public LoggerConfiguration Console()
{
// 配置控制台輸出
return _loggerConfiguration;
}
public LoggerConfiguration File(string path, RollingInterval rollingInterval)
{
// 配置文件輸出及滾動策略
return _loggerConfiguration;
}
// 其他輸出目標配置方法...
}
- 然後我又看了一下,回顧了我收藏的資源,果然我適合當鹹魚。
總結:
主要了為了記憶深刻一些;感覺有了那些大模型後更加懶了,不僅不主動去瞭解一些知識,也覺得以前寫都沒多大意義;留著留個念想;
覺得反正ai一下麽,不手到擒來(想法是錯的,使人懶惰,技術很難精進的);但是如果當個小嘍嘍,實話說無所謂了,我們很自信,我們也要掂量掂量自己的分量。
當然我也希望可以直接大躍進到,腦機介面民用,直接動腦子搜索(在思維上),直接讀取相關數據就好了,也不能都記住,畢竟記憶體還是有限的,腦容量是硬碟,記憶是記憶體。