使用工廠方法模式實現各種不同分潤規則

2021-07-30 20:11:01 字數 3098 閱讀 2538

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->fixedincomerolefixedraterolefactory->fixedraterolefixedrateandfixedincomerolefactory->fixedrateandfixedincomerolefixedrateandupperlimitrolefactory->fixedrateandupperlimitrolegradientraterolefactory->gradientraterole如果需要實現新的分潤規則,則分別編寫乙個分潤規則工廠類和分潤規則實現類,使其實分別繼承(/實現)profitrolefactoryprofitrole,然後再呼叫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 實現工廠方法模式

概述 工廠方法模式是乙個建立型設計模式,通過定義乙個建立物件的介面,讓其子類決定例項化哪乙個工廠類,乙個工廠類建立乙個例項,工廠模式使其建立過程延遲到子類進行。在工廠方法模式中,我們在建立物件時不會對客戶端暴露邏輯,並且通過使用乙個共同的介面來指向建立的物件。優點 符合開閉原則 不需要記住具體類名,...