什麼是策略模式策略模式是對演算法的包裝,是把使用演算法的責任和演算法本身分割開來,委派給不同的物件管理,最終可以實現解決多重if判斷問題。即每種實現即為一種策略
策略模式優缺點
策略模式應用場景一般用於聚合支付,聚合推送,聚合簡訊等
策略模式架構圖策略模式環境搭建pom.xmlspringutils
concretestrategy (具體實現角色)
paycontextservice (上下文)@component
public class alipaystrategy implements paystrategy
}@component
public class xiaomipaystrategy implements paystrategy
}
相關sql語句@restcontroller
public class paycontextservice
// 2.使用paycode查詢
if(paymentchannel==null)
// 3.獲取策略執行的beanid
string strategybeanid = paymentchannel.getstrategybeanid();
// 4.使用strategybeanid獲取對應spring容器bean資訊
paystrategy paystrategy = springutils.getbean(strategybeanid, paystrategy.class);
// 5.執行具體策略演算法
return paystrategy.topayhtml();}}
資料庫訪問層drop table if exists `payment_channel`;
create table `payment_channel` (
`id` int(11) not null auto_increment comment 'id',
`channel_name` varchar(32) not null comment '渠道名稱',
`channel_id` varchar(32) not null comment '渠道id',
`strategy_bean_id` varchar(255) default null comment '策略執行beanid',
primary key (`id`,`channel_id`)
) engine=innodb auto_increment=6 default charset=utf8 comment='支付渠道 ';
-- ----------------------------
-- records of payment_channel
-- ----------------------------
insert into `payment_channel` values ('4', '支付寶渠道', 'ali_pay', 'alipaystrategy');
insert into `payment_channel` values ('5', '小公尺支付渠道', 'xiaomi_pay', 'xiaomipaystrategy');
啟動類@data
public class paymentchannelentity
@select("\n" +
"select id as id ,channel_name as channelname ,channel_id as channelid,strategy_bean_id as strategybeanid\n" +
"from payment_channel where channel_id=#")
public paymentchannelentity getpaymentchannel(string paycode);
}
public static void main(string args) }
測試
基於列舉實現策略模式localhost:8088/topayhtml?paycode=ali_pay
思想**
設計模式精講
c 實現設計模式 1 設計模式簡介 c 實現設計模式 2 模板方法 c 實現設計模式 3 strategy模式 c 實現設計模式 4 觀察者模式 c 實現設計模式 5 裝飾模式 c 實現設計模式 6 橋模式 c 實現設計模式 7 工廠模式 c 實現設計模式 8 抽象工廠模式 c 實現設計模式 9 原...
設計模式課程 設計模式精講 10 1 外觀模式講解
1 課堂講解 1.1 型別 1.2 定義 1.3 適用場景 1.4 優點 1.5 缺點 1.6 相關聯設計模式對比 1 課堂講解 1.1 型別 型別 結構型 1.2 定義 定義 又叫門面模式,提供了乙個統一的介面,用來訪問子系統中的一群介面 外觀模式定義了乙個高層介面,讓子系統更容易使用 1.3 適...
精講Android設計模式 單例模式
單例的優點 1.只有乙個例項,節省開銷 2.全域性使用方便,同時避免頻繁建立和銷毀 使用單例的注意點 要避免造成 記憶體洩漏 單例不僅要滿足執行緒安全,還要注意防止序列化產生新物件。如果單例實現了serializable介面,就必須加入如下方法 列舉單例不用這麼做,因為jvm能保障這點 privat...