ビルダーモード(ビルダー) - 組み立てられたコンピュータから出発
合計Builderパターンの異なる個々の成分は、完全なサービスを形成するためにオブジェクトに対する特定の条件に従って合成されます。プロセスの構造を知らなくても、発信者。
私たちは、コンピュータの組み立て開始します
のはそれを購入するためにコンピュータを組み立ててみましょう。
アセンブリ、ほとんどの人が(、であるそのマシンを)ブランドのコンピュータを購入するために保存し、信頼することを選択しますブランドのコンピュータおよびコンピュータ - まず、コンピュータを購入し、一般的に2つのオプションがあります。ここでは、より良い私たちは、コンピュータの組立コストを購入することを決定したと仮定して、問題を分析するためです。だから我々はそれをどのように行うのですか。
まず、コンピュータのものの全体の一部を学ばなければなりませんか?
発見情報の部分を検索した後、主部材のマザーボード、CPU、ビデオカード、ディスプレイ、メモリなどに分かれています。これは、我々は、これは十分な光ではありません知っている、また始まりで、以下の各ハードウェアのブランドはいくつかあり、我々は確かに許可された場合に最高の価格を選びたいです。我々は、(淘宝網の売り手が示すだけでなく、いくつかのオンライン専門の査定者のレポートなど)の各成分に対応するブランドのユーザーの実際の状況の評判や経験を理解するための情報を探して時間を費やす必要がありますので。
まあ、この研究を完了した後、あなたは最終的に、ハードウェアの様々な方法を決定することができます。位置コンポーネントに各ホストボックスにされ、対応する方法と、プット何かどこしかし、最終的には問題はここにあり、買い戻すためにこれらのハードウェア、白いドレスでない人たちのものは、ああ、わかりません。悪い機器の場合には、操作方法、およびQibushibai費やしているお金。
それは別の紆余曲折の後、最終的にはコンピュータ全体を組み立てました。ただ、我々はトースト、突然深刻な問題を発見したときに......
「うわあ、またああ、だけでなく、ああインストールされたコンピュータシステムにドライブすることはできません」
「そして、どのようにああああやる!!!一日中忙しいです。」
「どうやって購入、購入、インストールされているすべてをインストールするには?ああ行うことができ、システムは、それをインストールすることができます!」
「また、私は何だろう、システムああをインストールすることはできません?」
「......ああ〜私はしません。」
「ねえ、のは、システムにそれをインストールする方法の情報を見つけるために行ってみましょう。」
上記の話は、ビューの我々ITERものの、それは非常に面白いと誇張されています。しかし、コンピュータ白用語のために、それは間違いなく起こります。大学では、私は終わったので。光がどのようにシステムを再インストールするには私の一日を過ごしてきました。
しかし、我々は午前中に学生寮の隣を持って、心配しないで、彼は彼が組み立てたコンピュータを購入しなかったと述べました。私たちは、今、私は彼が拷問のすべての種類によって、私たちと同じであることを願うが、彼らはあなたがシステムああをインストールする方法を私たちに教えることができるので、彼は、簡単なことを願って、正直に言うと、彼はそれを得る方法をご覧ください。
何?私はコンピュータをプレイし始めています
我々は、寝室のドアを入ったとき、私たちが起こっ唖然ので、私は彼が伝説のリーグを始めたことが判明し、成功したトリプルプレイしていると、ゲームを終了します。
私はすぐにどのようにすばやくコンピュータで再生するように頼んだ、と私は私の一日が出てベントに起こっ置きます。私は彼の笑いを見ました
「今、誰があなたはまだそれを理解していないようおろか、ああ様々な部分に自分のコンピュータ機器を買います。」
「そうでなければ、それを取得する方法を、機密ああを組み立てるより多くの高価な同じ価格のブランド」
「ハハ、あなたはこの愚かな事を与える、あなたはあなたの上司がリストにない組み立てを助けるためにコンピューターシティに行くことができる、あなただけの、これは手動で行まあ、ないギアにコストの一部を支払う行う必要があります」
「......」
非難を開始します
私たちが実際にBuilderパターンといくつかの可能性のある問題を開発することと等価ではない持っている最初の物語。ビジネスオブジェクト(コンピュータアセンブリ)を生成するために、我々は、ビジネス・オブジェクトコレクト会員情報(の一部)に時間とエネルギーを費やす必要があります。私は完全に一人に強く結合します(クライアント)の組織によって非常に多くのオブジェクトがあり、なぜなら全体の機能不全につながったいくつかのマイナーな需要の変化に思われる(システム、メモリの間違ったタイプなどをインストールすることを忘れ)。このように多くの時間とエネルギーを浪費し、我々は我々の人件費や経済的コストを増加させました。
二階は完全に介護ビジネスオブジェクトなしI(ユーザー/クライアント)ビルドプロセス、完全に異なっている、唯一のライン上のオブジェクトのためのコンピューターシティボス(ビルダー)を検索します。
まず、適切なビジネスオブジェクト(コンピュータ)を構築するために(契約)によると、ルールがあることが前提にあります。
そのため、コンピュータを組み立てるために正しい姿勢にするために、我々はいくつかの必要な部材(ハードウェア)を定義します
public interface IFullComputer {
string Mainboard { get; }
string CPU { get; }
string Disk { get; }
string Graphics { get; }
string Display { get; }
bool HasOperatingSystem { get; }
}
それが唯一の完全なコンピュータの右側を表しとともに、私たちの二階で見てみましょうが、それを呼び出した結果を達成する方法です。
public class Client {
// 交给电脑城老板
private void IWantBuyComputer() {
// 见到老板
var boss = new ComputerCityBoss();
// 告诉老板我想要什么配置的电脑,这里简单起就用老板推荐的
var computerBuilder = new DefaultFullComputerBuilder();
var computer = boss.TellMeThenReturnComputer(computerBuilder);
Console.WriteLine("电脑组件完毕,是否预装系统:" + computer.HasOperatingSystem);
}
}
クライアント(ユーザー)は、我々は、コンピュータを購入し、自分の上司に一致するようにコンピューターシティのコンピューターの設定に移動し、上司はあなたがコンピュータを組み立て与えるのを待ちする多くの人々は今と同じように、非常に簡単です。あなたは、アセンブリ、コンピュータの詳細を知る必要はありません。このようなコードは、サービスデータの分離にクライアントから行うことができます。
今、私たちは、特定の実装コードを見てみましょう。
public interface IFullComputerBuilder : IFullComputer {
IFullComputer Create();
}
public class DefaultFullComputerBuilder : AbstractFullComputerBuilder {
protected override void SetCPU() {
}
protected override void SetDisk() {
}
protected override void SetDisplay() {
}
protected override void SetGraphics() {
}
protected override void SetMainboard() {
}
}
// 老板与品牌商有合作
public abstract class AbstractFullComputerBuilder : IFullComputerBuilder {
public string Mainboard { get; set; } = "默认品牌主板";
public string CPU { get; set; } = "默认品牌CPU";
public string Disk { get; set; } = "默认品牌内存";
public string Graphics { get; set; } = "默认品牌显卡";
public string Display { get; set; } = "默认品牌显示器";
public bool HasOperatingSystem { get; set; }
public IFullComputer Create() {
SetMainboard();
SetCPU();
SetDisk();
SetDisplay();
SetGraphics();
InstallOperatingSystem();
if (!HasOperatingSystem) throw new InvalidOperationException("install faild: no operating system");
return this;
}
protected abstract void SetMainboard();
protected abstract void SetCPU();
protected abstract void SetDisk();
protected abstract void SetGraphics();
protected abstract void SetDisplay();
private void InstallOperatingSystem() {
//if (!condition) return;
HasOperatingSystem = true;
}
}
上司は、あなたがコンピュータを組み立てる与えるためにあなたの要求に基づいて行われます。あなたは特別な要件を持っていない場合はもちろん、それはブランド、利益のより多くの事と、所有者の協力にデフォルト設定されます。
public class ComputerCityBoss {
public IFullComputer TellMeThenReturnComputer(IFullComputerBuilder builder) {
return builder.Create();
}
}
学習を深める.NETCoreソースコードを見てみましょう
私たちは、知識ポイントの我々の理解を深め、優れた学習フレームワークのいくつかのソースを介しすることができます。
で.netcoreでは、Builderのモードは非常に一般的です。私は多くの人々が.netcoreプログラムはビルダーパターンを使用することです開始を知っていると信じて:
public class Program {
public static void Main(string[] args) {
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
});
}
どのIHostBuilderコンストラクタです。デフォルトの実装のHostBuilderのソースコードを見てみましょう:
public IHost Build()
{
if (_hostBuilt)
{
throw new InvalidOperationException("Build can only be called once.");
}
_hostBuilt = true;
BuildHostConfiguration();
CreateHostingEnvironment();
CreateHostBuilderContext();
BuildAppConfiguration();
CreateServiceProvider();
return _appServices.GetRequiredService<IHost>();
}
AbstractFullComputerBuilderが同じことを行うには - 明らかに、それは我々が前の例について話しているだけのよう行います。組織内のモジュールの多くを完全にすべてのオブジェクトを形成するために。外部クライアント(プログラム)は、その内部ビルダーの特定の詳細を知る必要はありませんが唯一の呼び出しを担当することができます。