「Head First デザインパターン」コード PHP 版 (オブジェクト指向学習) ページ 1/2
この本の例は比較的理解しやすいものですが、外国人が書いたものであるため、中国人の特徴にあまり合っていない場合があり、言語習慣も中国語ではありません。もちろん、この本を読んだ後は、デザイン パターンでどのような問題を解決できるか、またどのような問題を解決できないか (たとえば、コーディングの代替にはならない) を深く理解できます。
本のコードの一部を PHP に変更しました。コードを見て概念と組み合わせると、より理解しやすくなるはずです。
戦略モード
コードをコピー コードは次のとおりです:
/**
* 戦略パターン
* は、アルゴリズムのファミリーを定義し、相互に置き換えることができるように個別にカプセル化します。
* このモードでは、アルゴリズムを使用する顧客に関係なくアルゴリズムを変更します。
*/
//フライング動作インターフェイス
インターフェイス FlyBehavior {
public function fly();
}
//クワック動作インターフェイス
インターフェイス QuackBehavior {
public function quack();
}
//翼飛行
class FlyWithWingsimplements FlyBehavior {
public function fly() {
echo "I'm fly!!n";
}
}
//飛べません
class FlyNoWayimplements FlyBehavior {
public function fly() {
echo "飛べません!n"
}
}
class FlyRocketPoweredimplements FlyBehavior {
public function fly() {
echo "ロケットで飛んでいます!n";
}
}
class Qquack QuackBehavior を実装します {
public function quack() {
echo "Quackn";
}
}
class Squeak は QuackBehavior を実装します {
public function quack() {
echo " Squeakn" ;
}
}
class MuteQuack は QuackBehavior を実装します {
public function quack() {
echo "<<>>n";
}
}
抽象クラス Duck {
protected $quack_obj;
protected $fly_obj;
public function PerformQuack(); this- >quack_obj->quack();
}
public function PerformFly() {
$this->fly_obj->fly();
public function swim( ) {
echo "すべてのアヒルは浮きます!n";
}
public function setFlyBehavior(FlyBehavior $fb) {
$this->fly_obj = $fb; >}
public function setQuackBehavior(QuackBehavior $qb) {
$this->gt;quack_obj = $qb;
}
}
class ModelDuck extends Duck {
public function __construct () {
$this->fly_obj = new FlyNoWay();
$this->gt;quack_obj = new MuteQuack();
public function display(); >echo "私はモデル アヒルです!n";
}
}
$model = new ModelDuck();
$model->performFly(); $model ->performQuack();
//新しい機能を提供します
$model->setFlyBehavior(new FlyRocketPowered());
$model->setQuackBehavior(new Squeak()); 🎜 >$model->performFly();
$model->
?>
単体モード
コードをコピーします
コードは次のとおりです:
* シングルトン パターン
* クラスのインスタンスが 1 つだけ存在することを保証し、グローバル アクセス ポイントを提供します。 */ class MyClass { プライベート static $uniqueInstance; プライベート関数 __construct() {
}
パブリック 静的関数 getInstance() {
if (self::$uniqueInstance == null) {
self::$uniqueInstance = new MyClass();
}
return self::$uniqueInstance;
}
}
$myClass = MyClass::getInstance(); 🎜>var_dump($ myClass);
$myClass::getInstance();
var_dump($myClass);
ファクトリ メソッド パターン>
コードをコピー
コードは次のとおりです:
abstract class PizzaStore {
public function orderPizza($type) {
$pizza = $this->createPizza($type);
$pizza->prepare();
$pizza->bake();
$ピザ->カット();
$pizza->box();
$ピザを返します;
}
パブリック抽象関数 createPizza($type);
}
class NYPizzaStore extends PizzaStore {
public function createPizza($type) {
if ($type == "cheese") {
return new NYStyleCheesePizza();
} elseif ($type == "veggie") {
return new NYStyleVeggiePizza();
} elseif ($type == "clam") {
return new NYStyleClamPizza();
} elseif ($type == "papperoni") {
return new NYStylePapperoniPizza();
} else {
null を返します。
}
}
}
class ChicagoPizzaStore extends PizzaStore {
public function createPizza($type) {
if ($type == "cheese") {
新しい ChicagoStyleCheesePizza() を返します。
} elseif ($type == "veggie") {
return new ChicagoStyleVeggiePizza();
} elseif ($type == "clam") {
return new ChicagoStyleClamPizza();
} elseif ($type == "papperoni") {
return new ChicagoStylePapperoniPizza();
} else {
null を返します。
}
}
}
抽象クラス Pizza {
public $name;
パブリック $dough;
パブリック $sauce;
public $toppings = array();
public function prepare() {
echo "準備中 " 。 $this->name 。 「ん」;
エコー「生地を食べます...n」;
echo "ソースを追加しています...n";
echo "トッピングの追加: n";
for ($i = 0; $i
echo " " . $this->トッピング[$i] 。 「ん」;
}
}
public function bakery() {
echo "350n で 25 分間焼きます";
}
public function Cut() {
echo "ピザを斜めのスライスに切りますn";
}
public function box() {
echo "ピザを公式の PizzaStore ボックスに置きますn";
}
public function getName() {
return $this->name;
}
}
class NYStyleCheesePizza extends Pizza {
public function __construct() {
$this->name = "NY スタイル ソースとチーズのピザ";
$this->dough = "薄い生地の生地";
$this->sauce = "マリナラソース";
$this->トッピング[] = "すりおろしたレッジャーノ チーズ";
}
}
class NYStyleVeggiePizza extends Pizza {
public function __construct() {
$this->name = "NY スタイル ソースと野菜のピザ";
$this->dough = "薄い生地の生地";
$this->sauce = "マリナラソース";
$this->toppings[] = "すりおろしたレッジャーノ野菜";
}
}
class NYStyleClamPizza extends Pizza {
public function __construct() {
$this->name = "NYスタイルソースとアサリのピザ";
$this->dough = "薄い生地の生地";
$this->sauce = "マリナラソース";
$this->トッピング[] = "レッジャーノ貝のすりおろし";
}
}
class NYStylePapperoniPizza extends Pizza {
public function __construct() {
$this->name = "NYスタイルソースとパペロニピザ";
$this->dough = "薄い生地の生地";
$this->sauce = "マリナラソース";
$this->トッピング[] = "すりおろしたレッジャーノ パペロニ";
}
}
class ChicagoStyleCheesePizza extends Pizza {
public function __construct() {
$this->name = "シカゴ スタイル ディープ ディッシュ チーズ ピザ";
$this->dough = "極厚クラスト生地";
$this->sauce = "梅トマトソース";
$this->トッピング[] = "細切りモッツァレラチーズ";
}
public function Cut() {
echo "ピザを正方形のスライスに切りますn";
}
}
$myStore = new NYPizzaStore();
$chicagoStore = new ChicagoPizzaStore();
$pizza = $myStore->orderPizza("チーズ");
エコー「イーサンは " を注文しました。」 $pizza->getName() 。 「ん」;
$pizza = $chicagoStore->orderPizza("チーズ");
エコー「イーサンは " を注文しました。」 $pizza->getName() 。 「ん」;
?>
工厂モード
复制代 代码如下:
abstract class PizzaStore {
public function orderPizza($type) {
$pizza = $this->createPizza($type);
$pizza->prepare();
$pizza->bake();
$ピザ->カット();
$pizza->box();
$ピザを返します;
}
パブリック抽象関数 createPizza($type);
}
class NYPizzaStore extends PizzaStore {
public function createPizza($type) {
$pizza = null;
$ingredientFactory = 新しい NYPizzaIngredientFactory();
if ($type == "チーズ") {
$pizza = new CheesePizza($ingredientFactory);
$pizza->setName('ニューヨーク スタイル チーズ ピザ');
} elseif ($type == "veggie") {
$pizza = new VeggiePizza($ingredientFactory);
$pizza->setName('ニューヨークスタイルのベジピザ');
} elseif ($type == "clam") {
$pizza = new ClamPizza($ingredientFactory);
$pizza->setName('ニューヨーク風クラムピザ');
} elseif ($type == "papperoni") {
$pizza = new PapperoniPizza($ingredientFactory);
$pizza->setName('ニューヨークスタイル パパロニピザ');
}
$pizza を返す;
}
}
class ChicagoPizzaStore extends PizzaStore {
public function createPizza($type) {
if ($type == "cheese") {
return new ChicagoStyleCheesePizza();
} elseif ($type == "veggie") {
return new ChicagoStyleVeggiePizza();
} elseif ($type == "clam") {
return new ChicagoStyleClamPizza();
} elseif ($type == "papperoni") {
return new ChicagoStylePapperoniPizza();
} else {
null を返します。
}
}
}
interface PizzaIngredientFactory {
public function createDough();
パブリック関数 createSauce();
パブリック関数 createCheese();
パブリック関数 createVeggies();
パブリック関数 createPepperoni();
パブリック関数 createClam();
}
class NYPizzaIngredientFactoryimplements PizzaIngredientFactory {
public function createDough() {
return new ThinCrustDough();
}
public function createSauce() {
return new MarinaraSauce();
}
public function createCheese() {
return new ReggianoCheese();
}
public function createVeggies() {
$veggies = array(
new Garlic(),
new Onion(),
new Mushroom(),
new RedPepper ()、
);
$veggies を返します;
}
public function createPepperoni() {
return new SlicedPepperoni();
}
public function createClam() {
return new FreshClams();
}
}
class ChicagoPizzaIngredientFactoryimplements PizzaIngredientFactory {
public function createDough() {
return new ThickCrustDough();
}
public function createSauce() {
return new PlumTomatoSauce();
}
public function createCheese() {
return new Mozzarella();
}
public function createVeggies() {
$veggies = array(
new BlackOlives(),
new Spinach(),
new EggPlant(),
);
$veggies を返します;
}
public function createPepperoni() {
return new SlicedPepperoni();
}
public function createClam() {
return new FrozenClams();
}
}
抽象クラス Pizza {
public $name;
パブリック $dough;
パブリック $sauce;
パブリック $veggies = array();
パブリック $cheese;
パブリック $pepperoni;
パブリック $clam;
パブリック抽象関数 prepare();
public function bakery() {
echo "350n で 25 分間焼きます";
}
public function Cut() {
echo "ピザを斜めのスライスに切りますn";
}
public function box() {
echo "ピザを公式の PizzaStore ボックスに置きますn";
}
public function getName() {
return $this->name;
}
public function setName($name) {
$this->name = $name;
}
public function __toString() {
}
}
class CheesePizza extends Pizza {
public $ingredientFactory;
パブリック関数 __construct(PizzaIngredientFactory $ingredientFactory) {
$this->ingredientFactory = $ingredientFactory;
}
public function prepare() {
echo "準備中 " 。 $this->name 。 「ん」;
$this->dough = $this->ingredientFactory->createDough();
$this->sauce = $this->ingredientFactory->createSauce();
$this->cheese = $this->ingredientFactory->createCheese();
}
}
class ClamPizza extends Pizza {
public $ingredientFactory;
パブリック関数 __construct(PizzaIngredientFactory $ingredientFactory) {
$this->ingredientFactory = $ingredientFactory;
}
public function prepare() {
echo "準備中 " 。 $this->name 。 「ん」;
$this->dough = $this->ingredientFactory->createDough();
$this->sauce = $this->ingredientFactory->createSauce();
$this->cheese = $this->ingredientFactory->createCheese();
$clam = $this->ingredientFactory->createClam();
}
}
$nyPizzaStore = new NYPizzaStore();
$nyPizzaStore->orderPizza('cheese');
?>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。
