다른 패턴을 사용할 수 있는지 알고 있습니다. 현재 나는 추상적 인 공장 패턴을 사용하고 있으며, 나는 그것에 대해 꽤 잘 알고 있다고 생각한다. 내 자원은 위키 피 디아 외에입니다 : 내가 예를 들어 샘플 추상 팩토리 패턴을 만들기 위해 애플과 자사의 제품을 사용하고 http://www.tutorialspoint.com/design_pattern/abstract_factory_pattern.htm http://www.oodesign.com/abstract-factory-pattern.html https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/AbstractFactoryPHP 추상 팩토리 패턴 구현
. 나는 코드 중복이 나쁜 디자인이라는 것을 이해한다. 그러므로 나는 이것을 쓰고있다. 지금까지 내 코드는 다음과 같습니다.
abstract class AbstractAppleFactory {
abstract public function createiPod($capacity, $type, $color, $engraving);
abstract public function createiPhone($capacity, $type, $color, $antenna);
abstract public function createComputer($type, $HDCapacity, $CPU, $ram);
}
class iPodFactory extends AbstractAppleFactory {
public function createiPod($capacity, $type, $color, $engraving) {
$class = 'iPod' . $type;
return new $class($capacity, $color, $engraving);
}
public function createiPhone($capacity, $type, $color, $antenna){ /* no implementation necessary */}
public function createComputer($type, $HDCapacity, $CPU, $ram){ /* no implementation necessary */}
}
interface iPlayer {
public function play();
public function stop();
public function fastForward();
public function rewind();
}
abstract class iPod implements iPlayer {
protected $capacity;
protected $color;
protected $engraving;
public function __construct($capacity, $color, $engraving = null) {
$this->capacity = $capacity;
$this->color = $color;
$this->engraving = $engraving;
}
}
class iPodClassic extends iPod {
public function play() {/* implementation goes here */}
public function stop() {/* implementation goes here */}
public function fastForward() {/* implementation goes here */}
public function rewind() {/* implementation goes here */}
}
class iPodShuffle extends iPod {
public function play() {/* implementation goes here */}
public function stop() {/* implementation goes here */}
public function fastForward() {/* implementation goes here */}
public function rewind() {/* implementation goes here */}
}
등. 여기에 입력 할 코드가 너무 많습니다. 나는 그것이 디렉토리와 네임 스페이스에서 구성하는 것이 더 낫다는 것을 안다. 그것은 내가 지금 배우고있는 것이 아닙니다. 패턴과 OOP 개념을 배우고 있습니다.
문제의 부분은 : 나는 관련이없는 공장에서 두 불필요한 메소드를 구현하도록 강요하고
class iPodFactory extends AbstractAppleFactory {
public function createiPod($capacity, $type, $color, $engraving) {
$class = 'iPod' . $type;
return new $class($capacity, $color, $engraving);
}
public function createiPhone($capacity, $type, $color, $antenna){ /* no implementation necessary */}
public function createComputer($type, $HDCapacity, $CPU, $ram){ /* no implementation necessary */}
}
상속/추상화로 인해. createiPhone()
및 createComputer()
. 추상 팩토리 패턴을 제대로하고 있습니까? 다시 말하지만, "코드 중복은 나쁜 디자인입니다!" 이것에 대해 더 좋은 방법이 있습니까?
전체 프로젝트에서 한 패턴을 고수해야합니까? 저는 개인적으로 필요에 따라 디자인 패턴을 사용합니다. 종속성 주입을 사용하여 클래스에 iPhone 객체를 삽입하여 메소드를 사용할 수 있다고 생각하십니까? – Joao
그것은 단지 운동입니다. –