标签:keyword pre life 面向 变量 数组 参数 comm 输出
设计模式的宗旨就是:重用。
在面向对象中,类是用于生成对象的代码模版,而设计模式是用于解决共性问题的代码模版。
遵循这样的模板,我们可以设快速地设计出优秀的代码。
注意,设计模式只是模板,不是具体的代码。
它是为了代码复用,增加可维护性。
在学习设计模式的时候,有几个概念让我很难接受,这可能是从过程式编程转到面向对象编程的禁锢。
假设有这样一个对象:
class Person
{
private $name = ‘Human‘;
public function getName()
{
return $this->name;
}
}
不要觉得变量只能保存整形数字,数组和字符串,变量还可以保存对象的:
$man = new Person;
echo $man->getName();
如果另一个类用到了Person类的属性或方法,那直接穿进去就可以了:
class Student
{
public function __construct($person)
{
echo $person->getName();
}
}
// 传递对象,最后输出字符串“Human”
$jack = new Student(new Person);
但是这样有一个小问题,当传递给new Student()
不是一个Person
对象时,如下,
$jack = new Student(‘abc‘);
程序就会报错。于是有了第三种做法,限定参数的类型。
在传递参数的时候,就限定参数的类型,这样写:
class Student
{
public function __construct(Person $person)
{
echo $person->getName();
}
}
// 传递对象,
$jack = new Student(new Person);
这样,传给new Student()
的参数必须是Person
的实例。
还有一种经常用到的做法,就是用一个类的属性保存对象或对象集合。如下:
class Life
{
public $persons = [];
public function addPerson(Person $person)
{
$this->persons[] = $person;
}
}
$class = new Life();
$class->addPerson(new Person);
$class->addPerson(new Person);
var_dump($class->persons);
输出值:
array(2) {
[0]=>
object(Person)#2 (1) {
["name":"Person":private]=>
string(5) "Human"
}
[1]=>
object(Person)#3 (1) {
["name":"Person":private]=>
string(5) "Human"
}
}
面向对象的设计模式都是围绕上面的情形,做一些组合之后形成的。
所以,理解类之间关系才是重点。
标签:keyword pre life 面向 变量 数组 参数 comm 输出
原文地址:https://www.cnblogs.com/gjh99/p/10927513.html