検索
ホームページバックエンド開発PHPチュートリアルヘッドファーストデザインパターン 「ヘッドファーストデザインパターン」コード PHP版 オブジェクト指向学習 ページ1/2

この本の例は比較的理解しやすいですが、外国人が書いたものであるため、中国人の特徴にあまり合っていない場合があり、言語習慣も中国語ではありません。もちろん、この本を読んだ後は、デザイン パターンでどのような問題を解決できるか、またどのような問題を解決できないか (たとえば、コーディングの代替にはならない) を深く理解できます。
本の中のコードの一部をPHPに変更しました。コードを見て概念と組み合わせると理解しやすくなるはずです。
戦略モード

コードをコピー コードは次のとおりです:


/**
* 戦略パターン
* アルゴリズムのファミリーを定義し、相互に置き換えることができるように個別にカプセル化します。
* このモードでは、アルゴリズムを使用する顧客から独立してアルゴリズムを変更できます。
*/
//Flying Behavior Interface
interface FlyBehavior {
public function fly();
}
//Quack 動作インターフェイス
interface QuackBehavior {
public function quack();
}
//Wings fly
class FlyWithWingsimplements FlyBehavior {
public function fly() {
echo "I'm fly!!n" ;
}
}
//飛べません
class FlyNoWay は FlyBehavior を実装します {
public function fly() {
echo "飛べません!n"
}
}
class FlyRocketPowered は 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;
public 抽象関数 show();
$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->quack_obj = $qb;
}
}
class ModelDuck extends Duck {
public function __construct( ) {
$ this->fly_obj = new FlyNoWay();
$this->quack_obj = new MuteQuack();
}
public function display() {
echo "私はモデル アヒルです!n";
}
}
$model = new ModelDuck();
$model->performQuack();
//新しい機能を提供します
$model->setFlyBehavior( ));
$model->setQuackBehavior(new Squeak());
$model->performQuack()?>


;

コードをコピーします

コードは次のとおりです:


/**

* シングルトン パターン * クラスにインスタンスが 1 つだけあることを保証し、グローバル アクセス ポイントを提供します。 */ class MyClass { private static $uniqueInstance;

private function __construct() {

}
public static function getInstance() {
if (self::$uniqueInstance == null) {
self::$uniqueInstance = new MyClass();
}
return self::$uniqueInstance
}
}
$myClass = MyClass: :getInstance();
var_dump ($myClass);
var_dump($myClass);


コードをコピーしますコードは次のとおりです:


abstract class PizzaStore {
public function orderPizza($type) {
$pizza = $this->createPizza($type);
$ピザ->準備();
$ピザ->ベイク();
$ピザ->カット();
$ピザ->ボックス();
$ピザを返します;
}
パブリック抽象関数 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") {
return new 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;
パブリック$ソース;
パブリック $トッピング = array();
public function prepare() {
echo "準備中" 。 $this->name 。 「ん」;
エコー「ヨッシング生地...n」;
echo "ソースを追加しています...n";
echo "トッピングの追加: n";
for ($i = 0; $i toppings); $i++) {
echo " " . $this->トッピング[$i] 。 「ん」;
}
}
public functionake() {
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 = 新しい NYPizzaStore();
$chicagoStore = 新しい ChicagoPizzaStore();
$pizza = $myStore->orderPizza("チーズ");
エコー「イーサンは、を注文しました。」 $pizza->getName() 。 「ん」;
$pizza = $chicagoStore->orderPizza("チーズ");
エコー「イーサンは、を注文しました。」 $pizza->getName() 。 「ん」;
?>


工厂モード

复制代代码如下:


abstract class PizzaStore {
public function orderPizza($type) {
$pizza = $this->createPizza($type);
$ピザ->準備();
$ピザ->ベイク();
$ピザ->カット();
$ピザ->ボックス();
$ピザを返します;
}
パブリック抽象関数 createPizza($type);
}
class NYPizzaStore extends PizzaStore {
public function createPizza($type) {
$pizza = null;
$ingredientFactory = 新しい NYPizzaIngredientFactory();
if ($type == "チーズ") {
$pizza = 新しい 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('ニューヨークスタイル パパロニピザ');
}
$ピザを返します;
}
}
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;
パブリック$ソース;
パブリック $veggies = array();
パブリック$チーズ;
パブリック$ペパロニ;
公開 $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 = 新しい NYPizzaStore();
$nyPizzaStore->orderPizza('cheese');
?>


現在のページ 1/2 12次のページ

上記はヘッドファーストデザインパターン「Head First Design Pattern」のコードPHP版オブジェクト指向学習ページ1/2の紹介です。ヘッドファーストデザインパターンの内容も含めて、PHPに興味のある友人の参考になれば幸いです。チュートリアル。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
どのデータをPHPセッションに保存できますか?どのデータをPHPセッションに保存できますか?May 02, 2025 am 12:17 AM

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

どのようにPHPセッションを開始しますか?どのようにPHPセッションを開始しますか?May 02, 2025 am 12:16 AM

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?May 02, 2025 am 12:15 AM

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?May 02, 2025 am 12:11 AM

PHPセッションは、アプリケーションのパフォーマンスに大きな影響を与えます。最適化方法には以下が含まれます。1。データベースを使用してセッションデータを保存して応答速度を向上させます。 2。セッションデータの使用を削減し、必要な情報のみを保存します。 3.非ブロッキングセッションプロセッサを使用して、同時実行機能を改善します。 4.セッションの有効期限を調整して、ユーザーエクスペリエンスとサーバーの負担のバランスを取ります。 5.永続的なセッションを使用して、データの読み取り時間と書き込み時間を減らします。

PHPセッションはCookieとどのように異なりますか?PHPセッションはCookieとどのように異なりますか?May 02, 2025 am 12:03 AM

phpsesionsareserver-side、whilecookiesareclient-side.1)Sessionsionsionsoredataontheserver、aremoresecure.2)cookiesstoredataontheclient、cookiestoresecure、andlimitedinsizeisize.sesionsionsionivationivationivationivationivationivationivationivate

PHPはユーザーのセッションをどのように識別しますか?PHPはユーザーのセッションをどのように識別しますか?May 01, 2025 am 12:23 AM

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションを保護するためのベストプラクティスは何ですか?PHPセッションを保護するためのベストプラクティスは何ですか?May 01, 2025 am 12:22 AM

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

PHPセッションファイルはデフォルトで保存されていますか?PHPセッションファイルはデフォルトで保存されていますか?May 01, 2025 am 12:15 AM

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Mac版

SublimeText3 Mac版

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版

SublimeText3 中国語版

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール