我经常使用一种解决方案,我想知道是否存在与此解决方案相关或相邻的设计模式:
interface PhoneFormatterInterface {
public function format($phone);
}
class BrazilFormatter implements PhoneFormatterInterface {
public function format($phone) {
//format a phone from +55 11 9 6666 2222 to (11) 96666-2222
}
public function isElegible($country) {
//check if the country is right
}
}
class PhoneFormatter {
public $formatters;
public function add(PhoneFormatterInterface $phoneFormatter)
{
//add formatters
}
public function format($phone, $country)
{
foreach ($formatters as $formatter) {
if ($formatter->isElegible($country)) {
return $formatter->format($phone);
}
}
}
}
class Client
{
public function main()
{
$formatter = new PhoneFormatter();
$formatter->add(...) //Add formatters, may we have some factory here
$formatter->format('+55 11 9 6666 6666', 'BR');
}
}
我可以用已知模式命名此解决方案吗?
谢谢!
答案 0 :(得分:0)
这是strategy
设计模式的示例,此外,您可以创建abstract factory
来创建特定的国家/地区电话格式化程序,而不会在应用的所有代码中分散复杂性。
答案 1 :(得分:0)
Strategy
模式,也可以是Dependency Injection
模式
这里的例子: 的策略强>: Strategy pattern example