活到老,学到老
BlogJava
::
首页
::
联系
::
聚合
::
管理
9 Posts :: 1 Stories :: 2 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
给我留言
查看公开留言
查看私人留言
我参与的团队
随笔分类
Java企业开发(3)
Jvm,Java Core(1)
Web(1)
设计模式(3)
随笔档案
2011年4月 (4)
2011年3月 (1)
2010年2月 (2)
2010年1月 (1)
搜索
最新评论
1. re: 观察者模式
感觉例子不是特别好~~
--晴天
2. re: JMX In Action 总结(二)--HelloWorld例子
写得很不错。多谢分享。
--兵丸网络
阅读排行榜
1. URI和URL的区别(5957)
2. JMX In Action 总结(二)--HelloWorld例子(2952)
3. JMX In Action 总结(一)(2259)
4. Restful Web Services 读书笔记(一)(2027)
5. java Class文件解析实例(1400)
评论排行榜
1. JMX In Action 总结(二)--HelloWorld例子(1)
2. 观察者模式(1)
3. 策略模式(0)
4. JMX In Action 总结(一)(0)
5. Restful Web Services 读书笔记(一)(0)
2011年4月6日
#
观察者模式
摘要: 概念:观察者模式定义了一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 举个网上商城的例子,比如很多顾客对某个商品感兴趣,把商品收藏,当该商品降价、促销、有货了等事件发生时,就会发Email通知顾客。 UML图...
阅读全文
posted @
2011-04-07 22:29
simon.shen 阅读(320) |
评论 (1)
|
编辑
收藏
策略模式
从今天开始,把常用的设计模式都简单的整理一遍,希望每个星期能至少整理2个模式吧,先从简单的策略模式开始。
概念:
它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。
策略模式很简单,实际上就是OO中的多态,举个例子,某商场要进行促销,对于普通顾客打88折,对于银卡客户在88折基础上再满400减160,对于金卡客户在88折基础上再满400减200。
UML图如下所示:
接口DiscountStrategy代码如下:
public
interface
DiscountStrategy
{
public
double
discount(
double
sum);
}
类GeneralDiscountStrategy类代码如下:
public
class
GeneralDiscountStrategy
implements
DiscountStrategy
{
@Override
public
double
discount(
double
sum)
{
return
sum
*
0.88
;
}
}
类SilverDiscountStrategy类代码如下:
public
class
SilverDiscountStrategy
implements
DiscountStrategy
{
@Override
public
double
discount(
double
sum)
{
sum
=
sum
*
0.88
;
int
t
=
(
int
) sum
/
400
;
sum
=
sum
-
t
*
16
0
;
return
sum;
}
}
类GoldenDiscountStrategy代码如下:
public
class
GoldenDiscountStrategy
implements
DiscountStrategy
{
@Override
public
double
discount(
double
sum)
{
sum
=
sum
*
0.88
;
int
t
=
(
int
) sum
/
400
;
sum
=
sum
-
t
*
200
;
return
sum;
}
}
类Cashier代码如下:
public
class
Cashier
{
private
DiscountStrategy discountStrategy
=
new
GeneralDiscountStrategy();
public
void
getDiscountStrategy(CustomerLevel customerLevel)
{
switch
(customerLevel)
{
case
GENERAL:
discountStrategy
=
new
GeneralDiscountStrategy();
break
;
case
SILVER:
discountStrategy
=
new
SilverDiscountStrategy();
break
;
case
GOLDEN:
discountStrategy
=
new
GeneralDiscountStrategy();
break
;
}
}
public
double
calculate(
double
price,
int
num)
{
return
discountStrategy.discount(price
*
num);
}
}
posted @
2011-04-06 22:56
simon.shen 阅读(341) |
评论 (0)
|
编辑
收藏
Copyright @ simon.shen
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster