ビジネスゴーストがテンプレートメソッドパターンを教える

ここに画像の説明を挿入

ストーリーライン

開校後、光潤の強力な宣伝と学校の絶好のロケーションにより、光潤のビジネスは非常に熱くなり、彼の手はほとんど止まりませんでした。

しかし、彼は忙しくて乱雑です。時々、彼はハンバーガーにレタスを加えることを忘れたり、ミルクティーに真珠を加えることを忘れたり、時にはソーセージを甘くてスパイシーなソースで2回ブラッシングしたりしています...など
。 Guangjunは非常に悩みました。

ヘルパーを見つけてみませんか?まず第一に、短期間で熟練者を見つけるのは簡単ではありません。また、オープニングバーゲンなら大したことはありません。主な理由は評判を築くことですので、失敗することはありません!

実行する方法?Guangjunは少し難しいです。この時、仲良しの私が別の店を買ったと聞いたので、元気を出して来たくて、光潤がたまに肉を2つ入れてくれました。しかし、私は思った:くそー、彼は本当に良い兄弟です!
その結果、彼が正午に休んでいたとき、彼はこの事件について知らなかったと言って、それについて私に話しました。

さりげなく言っただけですが、組み立てライン全体を楽しんでセットを作るだけです。

話し手は意図を持たず、聞き手は意図を持っています。彼が実際にセットをセットアップしたことを誰が知っているのか、それはまだそれほど有益ではなく、コストがかかります。

この組立ラインはどのようなものですか?
ここに画像の説明を挿入

おそらくこのようになるでしょう:
ハンバーガーを作るための組立ライン:バーベキュー、トースト、レタス、バター、パン、肉。
鶏もも肉バーガーを作りたいなら鶏もも肉を、ビーフバーガーを作りたいなら牛肉を入れて...

ミルクティーの生産ライン:カップを取る(大、中、小)、お茶を入れる、牛乳を加える、給餌1、給餌2、給餌3。
材料が足りない場合でも、プロセスは続行する必要があります。材料には上限が3つしかなく、テンプレートを変更する必要があります。

焼きソーセージの組立ラインは書いておらず、また書くのもつまらない。

このように、Guangjunは忙しく、秩序だった仕事を始めました。事実は、この動きが彼の店の将来の発展において極めて重要な役割を果たすことを証明しています。

テンプレートメソッドパターン

では、この短編小説で学びたいデザインパターン、テンプレートメソッドパターンを見てみましょう。

では、テンプレートメソッドパターンとは何でしょうか。
動作中のアルゴリズムのフレームワークを定義し、サブクラスがアルゴリズムの構造を変更せずにアルゴリズムの特定のステップを再定義できるように、サブクラスへのいくつかのステップを遅らせます。
ここに画像の説明を挿入

それを言うことは非常に明確ではないかもしれません、

封装不变部分,拓展可变部分(把认为是不变部分的算法封装到父类实现,而可变部分可以通过继承来继续拓展。如果要在来个新产品,虾堡,知道怎么做吧)
提取公共部分代码,便于维护。想想看,那个run要是放到子类,那要修改会有几倍工作量?
行为由父类控制,子类实现。

上に栗を入れるのは、いつ、何をすべきかを事前に決めることです。たとえば、最初に肉をローストし、次にパンを焼く、どの肉をローストするか、どのパンを焼くか、鶏の脚、オートミールブレッド、牛肉、スライスしたパンかどうか、特定のオペレーター(Guangjun)によって一意に決定されます。

このように、すべてがとても整然としています!

簡単にハンブルグフローの実現プロセスに行きましょう:

クラス図表示

ここに画像の説明を挿入

コードデモの例:

#include<iostream>

using namespace std;

class abstracthumber {
    
    
public:
	virtual void bread() = 0;
	virtual void barbecue() = 0;
	virtual void cream() = 0;
	virtual void lettuce() = 0;

	void run()	//将共同的核心算法流程提炼到抽象类
	{
    
    
		this->bread();
		this->barbecue();
		this->cream();
		this->lettuce();
	}
};

//将细节延迟到子类
//这两步便是模板方法模式的精髓
class chicken :public abstracthumber {
    
    
public:
	void bread() {
    
     cout << "鸡腿堡的面包" << endl; }
	void barbecue() {
    
     cout << "鸡腿堡的鸡腿" << endl; }
	void cream() {
    
     cout << "鸡腿堡的奶油" << endl; }
	void lettuce() {
    
     cout << "鸡腿堡的生菜" << endl; }
};

class beef :public abstracthumber {
    
    
public:
	void bread() {
    
     cout << "牛肉堡的面包" << endl; }
	void barbecue() {
    
     cout << "牛肉堡的鸡腿" << endl; }
	void cream() {
    
     cout << "牛肉堡的奶油" << endl; }
	void lettuce() {
    
     cout << "牛肉堡的生菜" << endl; }
};


int main()
{
    
    
	abstracthumber* a = new chicken();
	abstracthumber* b = new beef();

	a->run();
	b->run();
}

私の考え:

この方法は優れており、コアアルゴリズムと詳細を分離していますが、拡張の問題は依然として存在します。
チームワークとコード継承アプリケーションで優れたパフォーマンスが得られます。


今日ここに来て、Guangjun起業家の話はまだ書かれています、誰もが私に従​​うことができます

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_43762191/article/details/108685521