我对使用OOP管理商店项目的系统设计存在疑问.我创建了具有$ name和$ price属性的抽象类Product.后来我创建了扩展Product的类Smartphone.智能手机具有$ brand和$ os属性.后来我创建了扩展Product的类Computer,其属性为$ cpuFrequency和$ ram.现在,如果我想创建一个与Nexus 5相对应的对象,例如,我该怎么办?例如,考虑一下这个对象会有
$name = "Nexus 5"
$price = "250"
$brand = "LG"
$os="Android"
$cpuFrequency "2.0"
$ram = "2".
Run Code Online (Sandbox Code Playgroud)
这是一个类的例子.
abstract class Product {
private $name;
private $price;
//more methods
}
class Smartphone extends Product{
private $brand;
private $os;
}
class Computer extends Product {
private $cpuFrequency;
private $ram;
}
Run Code Online (Sandbox Code Playgroud)
还认为可能有没有$ os的计算机和没有$ ram的智能手机.举个例子:D
PS我知道智能手机是一台电脑.我做了一个坏榜样.请在电话和电脑上思考.电话有$ number和$ operator.现在我想创建一个同时是电话和电脑的智能手机.
谢谢大家,再次抱歉我的英语
您可以尝试使用 ProductProperties 类,如下所示:
class ProductProperties
{
private properties = array();
public function getProperties()
{
return this->properties;
}
public function addProperty($id, $value)
{
this->properties[$id] = $value;
}
public function getProperty($id)
{
return this->properties[$id];
}
}
abstract class Product
{
private $properties;
//more methods
public function __construct(ProductProperties $properties)
{
$this->properties = $properties;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将 ProductProperties 类的对象传递给任何产品,并让它处理所有与属性相关的问题。这将实现更灵活的设计,这样您就不需要仅仅因为产品具有一组不同的属性而进行子类化。请记住,子类化就是更改或添加行为。