处理复杂对象创建的最佳设计模式或方法是什么?如果某些对象具有相同的构造函数,此模式是否会发生变化?
我有一个工厂模式类,它包含生成所需对象所需的常量。在创建对象时,开发人员应该传递他们选择的常量。其中一些对象只是一个父构造函数,但其他对象可能更复杂。
建造者的设计模式会更好吗?
class IbmApiRequestTypeBuilder {
const INSTRUMENT_REQUEST = array("id" => 0,
"requestUrl" => "/instrument/requestInstrumentList",
"requestType" => "post",
"requestBodyHead"=>"RequestInstrumentList",
"requestBody" => "requestInstrumentList");
const CREATE_SESSION_REQUEST = array("id" =>1,
"requestUrl" => "/instrument/requestSession",
"requestType" => "post",
"requestBodyHead"=>"requestSession",
"requestBody"=>"sessionRequest");
public static function createApiRequestType($type) {
$requestObj = null;
switch($type['id']) {
case 0:
$requestObj = new IbmApiRequestInstruments($type['requestUrl'],
$type['requestType'],
$type['requestBodyHead'],
$type['requestBody']);
break;
case 1:
$requestObj = new IbmApiRequestSession($type['requestUrl'],
$type['requestType'],
$type['requestBodyHead'],
$type['requestBody']);
break;
}
return $requestObj;
}
}
答案 0 :(得分:0)
如果char[] charArray = new char[] { 'h', 'e', 'l', 'l', 'o', 'a' };
Arrays.sort(charArray);
System.out.println(Arrays.binarySearch(charArray, 'a'));
始终是如何创建请求对象的唯一标准。我会说这个工厂方法会起作用,我喜欢它的简单性。
另一方面,如果有许多配置,许多变体,我可能会选择更灵活的构建器模式。在这种情况下,常量值可以用作默认值,构建器在使用时可以覆盖。
但是如果按原样保留这个类,我会将它重命名为IbmApiRequestTypeFactory并重命名该方法以简单地创建($ type)。因为它不是构建器,并且从上下文中它只能创建一种类型的对象。 我
答案 1 :(得分:0)
你的代码看起来像是factory method
模式的一个很好的候选者,我想你只需要简单地简化它,比如:
public static function createApiRequestType($type) {
$requestObj = null;
$className = '';
switch($type['id']) {
case 0:
$className = 'IbmApiRequestSession';
break;
case 1:
$className = 'IbmApiRequestInstruments';
break;
}
return new $className($type['requestUrl'],
$type['requestType'],
$type['requestBodyHead'],
$type['requestBody']
);
}