github:
public
inte***ce
profitrole
public
abstract
class
profitrolefactory
return profittype.getfactory().newprofitrole(profittype, matcher, expression);
}protected
abstract profitrole newprofitrole(profittype profittype, matcher matcher, string expression);
}
該類主要提供乙個統一的介面profitrolefactory.createprofitrole
建立分潤規則實現類每乙個分潤規則實現類對應乙個分潤規則工廠類,由分潤規則工廠類來建立出分潤規則物件
再由分潤規則物件實現具體的分潤細節
public
class
profittype
private string name;
private string expression;
private string description;
private profitrolefactory factory;
public
profittype(string name, string expression, profitrolefactory factory, string description)
public
static pattern getnumberpattern()
public string getname()
public pattern getpattern()
/*** 註冊分潤規則型別
*/public
static
void
registerprofitrole(string name, string profitroleexpression,profitrolefactory factory, string description)
profittypemap.put(name, new profittype(name, profitroleexpression, factory, description));
}public profitrolefactory getfactory()
public string getdescription()
/*** 根據分潤規則名字獲取分潤規則型別
*/public
static profittype getprofittype(string name)
public
static string getprofittypeinfo()
return sb.tostring();
}}
目前提供五種分潤規則:
1. 每筆固定收益1元,則填寫**商收益1.00
2. 每筆收益率為0.1%則填寫**商收益0.1%
3. 每筆收益率為0.1%加上固定收益1元,則填寫**商收益0.1%+1.00
4. 每筆收益率為0.1%,封頂3元,保底1元則填寫**商收益1.00~0.1%~3.00
5. 梯度分潤 例如 0.1%<10000<0.2%<20000<0.3%<30000<0.5%
- 少於10000 按照 0.1% 分潤
- 少於20000 按照 0.2% 分潤
- 少於30000 按照 0.3% 分潤
- 多於30000 按照 0.5% 分潤
分別對應於分潤規則工廠類
->分潤規則實現類
:
fixedincomerolefactory
->fixedincomerole
fixedraterolefactory
->fixedraterole
fixedrateandfixedincomerolefactory
->fixedrateandfixedincomerole
fixedrateandupperlimitrolefactory
->fixedrateandupperlimitrole
gradientraterolefactory
->gradientraterole
如果需要實現新的分潤規則,則分別編寫乙個分潤規則工廠類和分潤規則實現類,使其實分別繼承(/實現)profitrolefactory
和profitrole
,然後再呼叫profittype.registerprofitrole
註冊一下新的分潤規則就萬事大吉了.不需要修改原有的**.也就是實現了完全解耦.
public
class
testprofitrole2
@test
public
void
testfixedincome()
}@test
public
void
testfixedrate()
}@test
public
void
testfixedrateandfixedincome()
}@test
public
void
testfixedrateandupperlimit()
if (actual > 3.0)
assert.assertequals(actual, profit, 0.00001);}}
@test
public
void
testgradientrate()else
if (data < 5000)else
if(data < 15000)else}}
}
4 2 使用工廠方法建立Bean
不使用spring建立bean例項,而是把bean建立過程轉移到開發者手中。建立工廠類 package com.erick.d1.hello public class studentfactorystatic id student class com.erick.d1.hello.studentfa...
使用工廠方法替換switch語句
如果switch語句中的分支固定,且不可變 例如,星期中只有7天 不用使用工廠方法替換 如果分支不固定,或將來有可能改,可以採用工廠方法來替換switch語句,這樣就符合開發閉合原則。plandatatype 型別 package com.test.factory public inte ce pl...
C 實現工廠方法模式
概述 工廠方法模式是乙個建立型設計模式,通過定義乙個建立物件的介面,讓其子類決定例項化哪乙個工廠類,乙個工廠類建立乙個例項,工廠模式使其建立過程延遲到子類進行。在工廠方法模式中,我們在建立物件時不會對客戶端暴露邏輯,並且通過使用乙個共同的介面來指向建立的物件。優點 符合開閉原則 不需要記住具體類名,...