面向对象编程的关键点(用php实现面向对象的、变化跟不变化进行伪代码逻辑进阶编程)
来源:互联网 发布:老僧扫矿软件 病毒 编辑:程序博客网 时间:2024/06/11 08:37
提高代码的复用性,符合OCP原则。本质就是把变化的部分和不变的部分隔离开,使得变化部分发生变化时,不变部分不受影响。
随着面向对象分析与设计的发展,一个良好的设计,核心原则之一就是将变化隔离,使得变化部分发生变化时,不变部分不受影响(这也是OCP的目的)。为了做到这一点,要利用面向对象中的多态性,使用多态性后,客户类不再直接依赖服务类,而是依赖于一个抽象的接口,这样,客户类就不能在内部直接实例化具体的服务类。
问题:开发一个打怪物游戏,主角可以用试用不同的武器攻击怪物。不同武器,打怪掉血的多少不一样。编程实现一个灵活的实现该问题的代码。(充分利用面向对象的原则,将变化的进行接口定义,保证以后的便于的可拓展性。将不变的逻辑封装进主角中,向外提供一个武器接口,同时一定具有工具怪物的能力。怪物一定具有hp血量,和Benson生命值以及受攻击血量的创伤量)
code:
<?php
class Hero
{
//英雄不问出处,所以不用分配名字
//分配一个武器对象接口,并没有限定武器的类型跟武器威力
public $wep;
public $name;
function __construct($name)
{
$this->name = $name;
}
public function Weapon($weapon)
{
$this->wep = $weapon;
}
public function Attack($moster)
{
echo 'Hi,英雄正在打怪物'.$this->name;
$this->wep->AttackTarget($moster);
}
}
//统一武器接口类、方便以后武器的拓展
interface Weapons
{
public function AttackTarget(Moster $moster);
}
//枪作为近距离攻击武器、威力是每次消灭20滴血
class Gun implements Weapons
{
public function AttackTarget(Moster $moster)
{
echo '用的是手枪';
$moster->Harm(20);
//$moster = $moster;
}
}
class Cannon implements Weapons
{
public function AttackTarget(Moster $moster)
{
echo '用的是大炮';
$moster->Harm(50);
}
}
//怪物类
class Moster
{
//行不改名,坐不掉血~
public $name;
public $hp;
public function __construct($name,$hp)
{
$this->name = $name;
$this->hp = $hp;
}
public function Harm($loss)
{
if($this->hp <=0)
{
echo '怪物名字'.$this->name.'已经死了!!!';
die();
}
$this->hp -= $loss;
if($this->hp <=0)
{
echo '怪物刚刚被消灭</br>';
}
else
{
echo '怪物被失血'.$loss.'</br>';
}
}
}
$tank = new Hero('Tank');
$gun = new Gun();
$tank->Weapon($gun);
//var_dump($weapon);
$moster1 = new Moster('pei',100);
$tank->Attack($moster1);
$tank->Attack($moster1);
//切换大炮
$can = new Cannon();
$tank->Weapon($can);
$tank->Attack($moster1);
$tank->Attack($moster1);
- 面向对象编程的关键点(用php实现面向对象的、变化跟不变化进行伪代码逻辑进阶编程)
- PHP的面向对象编程
- PHP的面向对象编程
- PHP的面向对象编程
- 面向对象编程的PHP
- PHP的面向对象编程
- 面向对象设计三大原则(封装变化点,对接口进行编程,多使用组合而不是继承)
- 面向对象设计三大原则(封装变化点,对接口进行编程,多使用组合而不是继承)
- 面向对象编程进阶
- 面向对象编程进阶
- 面向对象编程进阶
- 面向对象编程进阶
- 面向对象编程的几点思考
- PHP面向对象编程 面向对象的基本实践
- PHP面向对象编程 面向对象的高级实践
- PHP面向对象编程 面向对象的特殊实践
- 面向对象的编程
- 面向对象的编程
- YUV420数据转为IplImage格式
- Java多线程编程(一)
- BZOJ2705: [SDOI2012]Longge的问题
- Hashmap实现原理
- 接口和抽象类
- 面向对象编程的关键点(用php实现面向对象的、变化跟不变化进行伪代码逻辑进阶编程)
- iOS 一些关键描述字
- c++快速简易入门教程_007虚函数与多态性、纯虚函数
- 注册表操作(VC_Win32)
- 回调函数
- Java中HashMap,LinkedHashMap,TreeMap的区别
- php安装PDO_ODBC驱动
- c++快速简易入门教程_008函数的覆盖和隐藏
- Kotlin学习之委托机制