이 기사에서 공유한 내용은 PHP 전략 모델에 관한 것으로, 특정 참조 가치가 있습니다. 도움이 필요한 친구가 참조할 수 있습니다.
예: 전자 상거래 웹 사이트 시스템에서는 남성 사용자와 여성 사용자가 서로 다른 페이지로 이동해야 합니다. 제품 카테고리 및 모든 광고 공간에 다른 광고 표시
6 프로젝트 신청
6.1 요구 사항 설명
쇼핑몰 캐시어 시스템을 구현하고 제품에는 일반 충전, 할인 충전, 리베이트 충전 및 기타 모드가 있을 수 있습니다. ( "Dahua 디자인 패턴"에서)
6.2 요구사항 분석
필요에 따라 과금 작업은 일반 과금, 할인 과금, 리베이트 과금 모두 이 인터페이스를 상속받아 인터페이스 알고리즘으로 설계할 수 있습니다. 다양한 전략을 구현합니다. 그런 다음 정책 인스턴스를 유지하기 위한 환경 클래스를 설계합니다.
6.3 디자인 아키텍처 다이어그램
6.4 프로그램 소스 코드 다운로드
http://download.csdn.net/detail/clevercode/8700009
6.5 프로그램 설명
1) strategy.php
[php]일반 사본 보기
<?php /** * strategy.php * * 策略类:定义了一系列的算法,这些算法都是完成的相同工作,但是实现不同。 * * 特别声明:本源代码是根据《大话设计模式》一书中的C#案例改成成PHP代码,和书中的 * 代码会有改变和优化。 * * Copyright (c) 2015 http://blog.csdn.net/CleverCode * * modification history: * -------------------- * 2015/5/5, by CleverCode, Create * */ // 定义接口现金策略,每种策略都是具体实现acceptCash,但都是实现收取现金功能 interface ICashStrategy{ // 收取现金 public function acceptCash($money); } // 正常收取策略 class NormalStrategy implements ICashStrategy{ /** * 返回正常金额 * * @param double $money 金额 * @return double 金额 */ public function acceptCash($money){ return $money; } } // 打折策略 class RebateStrategy implements ICashStrategy{ // 打折比例 private $_moneyRebate = 1; /** * 构造函数 * * @param double $rebate 比例 * @return void */ public function __construct($rebate){ $this->_moneyRebate = $rebate; } /** * 返回正常金额 * * @param double $money 金额 * @return double 金额 */ public function acceptCash($money){ return $this->_moneyRebate * $money; } } // 返利策略 class ReturnStrategy implements ICashStrategy{ // 返利条件 private $_moneyCondition = null; // 返利多少 private $_moneyReturn = null; /** * 构造函数 * * @param double $moneyCondition 返利条件 * @return double $moneyReturn 返利多少 * @return void */ public function __construct($moneyCondition, $moneyReturn){ $this->_moneyCondition = $moneyCondition; $this->_moneyReturn = $moneyReturn; } /** * 返回正常金额 * * @param double $money 金额 * @return double 金额 */ public function acceptCash($money){ if (!isset($this->_moneyCondition) || !isset($this->_moneyReturn) || $this->_moneyCondition == 0) { return $money; } return $money - floor($money / $this->_moneyCondition) * $this->_moneyReturn; } }
2) strategyPat ter n.php
[php] 일반 사본 보기
<?php /** * strategyPattern.php * * 设计模式:策略模式 * * 模式简介: * 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, * 不会影响到使用算法的客户。 * 策略模式是一种定义一些列算法的方法,从概念上来看,所有这些算法完成的都是 * 相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类 * 与使用算法类的耦合。 * 本源码中的各种结账方式,其实都是在结账,但是具体的实现确实不同的。策略模式与 * 命令模式不同的是,命令模式的算法是相互独立的,每个命令做的工作是不同的。而策略模式 * 却是在做通一种工作。 * * 特别声明:本源代码是根据《大话设计模式》一书中的C#案例改成成PHP代码,和书中的 * 代码会有改变和优化。 * * Copyright (c) 2015 http://blog.csdn.net/CleverCode * * modification history: * -------------------- * 2015/5/14, by CleverCode, Create * */ // 加载所有的策略 include_once ('strategy.php'); // 创建一个环境类,根据不同的需求调用不同策略 class CashContext{ // 策略 private $_strategy = null; /** * 构造函数 * * @param string $type 类型 * @return void */ public function __construct($type = null){ if (!isset($type)) { return; } $this->setCashStrategy($type); } /** * 设置策略(简单工厂与策略模式混合使用) * * @param string $type 类型 * @return void */ public function setCashStrategy($type){ $cs = null; switch ($type) { // 正常策略 case 'normal' : $cs = new NormalStrategy(); break; // 打折策略 case 'rebate8' : $cs = new RebateStrategy(0.8); break; // 返利策略 case 'return300to100' : $cs = new ReturnStrategy(300, 100); break; } $this->_strategy = $cs; } /** * 获取结果 * * @param double $money 金额 * @return double */ public function getResult($money){ return $this->_strategy->acceptCash($money); } /** * 获取结果 * * @param string $type 类型 * @param int $num 数量 * @param double $price 单价 * @return double */ public function getResultAll($type, $num, $price){ $this->setCashStrategy($type); return $this->getResult($num * $price); } } /* * 客户端类 * 让客户端和业务逻辑尽可能的分离,降低客户端和业务逻辑算法的耦合, * 使业务逻辑的算法更具有可移植性 */ class Client{ public function main(){ $total = 0; $cashContext = new CashContext(); // 购买数量 $numA = 10; // 单价 $priceA = 100; // 策略模式获取结果 $totalA = $cashContext->getResultAll('normal', $numA, $priceA); $this->display('A', 'normal', $numA, $priceA, $totalA); // 购买数量 $numB = 5; // 单价 $priceB = 100; // 打折策略获取结果 $totalB = $cashContext->getResultAll('rebate8', $numB, $priceB); $this->display('B', 'rebate8', $numB, $priceB, $totalB); // 购买数量 $numC = 10; // 单价 $priceC = 100; // 返利策略获取结果 $totalC = $cashContext->getResultAll('return300to100', $numC, $priceC); $this->display('C', 'return300to100', $numC, $priceC, $totalC); } /** * 打印 * * @param string $name 商品名 * @param string $type 类型 * @param int $num 数量 * @param double $price 单价 * @return double */ public function display($name, $type, $num, $price, $total){ echo date('Y-m-d H:i:s') . ",$name,[$type],num:$num,price:$price,total:$total\r\n"; } } /** * 程序入口 */ function start(){ $client = new Client(); $client->main(); } start(); ?>
관련 추천:
위 내용은 PHP 전략 패턴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 같은 작업에 적합합니다.

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
