この本の例は比較的理解しやすいですが、外国人が書いたものであるため、中国人の特徴にあまり合っていない場合があり、言語習慣も中国語ではありません。もちろん、この本を読んだ後は、デザイン パターンでどのような問題を解決できるか、またどのような問題を解決できないか (たとえば、コーディングの代替にはならない) を深く理解できます。
本の中のコードの一部を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
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に興味のある友人の参考になれば幸いです。チュートリアル。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

Dreamweaver Mac版
ビジュアル Web 開発ツール

ホットトピック









