- 浏览: 203629 次
- 性别:
- 来自: 芜湖
文章分类
- 全部博客 (139)
- 软件 (0)
- Pattern (6)
- CSDN导入 (19)
- Struts (3)
- [网站分类]1.网站首页原创 (27)
- [网站分类]6.转载区 (4)
- Hibernate (10)
- Error (8)
- [网站分类]2.Java新手区 (20)
- Java (8)
- [网站分类]4.其他技术区 (10)
- Web (1)
- C++ (2)
- Algorithm (4)
- Linux (2)
- Skill (1)
- Tech (2)
- Note (2)
- [网站分类]3.非技术区 (1)
- Database (1)
- Winty (7)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
最新评论
-
haohao-xuexi02:
很不错哦。
O'Reilly cos上传组件的使用(1/3) - 上传文件 -
yoin528:
useUnicode=true&charact ...
[原]向MySQL数据库插入Blob数据的问题 -
xiaoqing20:
下载来看看!呵呵
[原]Struts2类型转换 -
xiaoqing20:
[原]Struts2类型转换
[关键字]:java,design pattern,设计模式,《Java与模式》学习,Strategy,策略模式,图书,折扣,DiscountStrategy
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com)
[正文]:
package pattern.strategy;
/**
* 策略模式:Strategy Pattern
*
* 图书折扣的计算:
* 1、无折扣
* 2、固定折扣(例如:提供10元的折扣)
* 3、百分比折扣(例如:提供7%的折扣)
*
* @verison 2009-05-20
* @author Winty (wintys@gmail.com)
*
*/
public class StrategyTest {
public static void main(String[] args) {
double discount = 0;
Book book = new Book(88.5);
book.setStrategy(new NoDiscountStrategy());
discount = book.getDiscount();
System.out.println("折扣:" + discount);
book.setStrategy(new FlatDiscountStrategy(10));
discount = book.getDiscount();
System.out.println("折扣:" + discount);
book.setStrategy(new PercentageDiscountStrategy(0.07));
discount = book.getDiscount();
System.out.println("折扣:" + discount);
}
}
/**
* 环境(Context)
* @author Winty
*
*/
class Book{
private double price;
private DiscountStrategy strategy;
public Book(double price){
this.price = price;
}
/**
* 调用Strategy的策略方法进行计算
* @return 折扣数额
*/
public double getDiscount(){
strategy.setPrice(price);
return strategy.calculateDiscount();
}
public DiscountStrategy getStrategy() {
return strategy;
}
public void setStrategy(DiscountStrategy strategy) {
this.strategy = strategy;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
/**
* 抽象策略:Strategy
* @author Winty
*
*/
abstract class DiscountStrategy{
private double price;
public DiscountStrategy(){
}
/**
* 策略方法
* @return 折扣数额
*/
public abstract double calculateDiscount();
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
/**
* 具体策略:无折扣算法
* @author Winty
*
*/
class NoDiscountStrategy extends DiscountStrategy{
public NoDiscountStrategy(){
}
@Override
public double calculateDiscount(){
return 0.0;
}
}
/**
* 具体策略:固定量折扣算法
* @author Winty
*
*/
class FlatDiscountStrategy extends DiscountStrategy{
private double amount;
public FlatDiscountStrategy(double amount){
this.amount = amount;
}
@Override
public double calculateDiscount() {
return amount;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
}
/**
* 具体策略:百分比折扣策略
* @author Winty
*
*/
class PercentageDiscountStrategy extends DiscountStrategy{
private double percent;
public PercentageDiscountStrategy(double percent){
this.percent = percent;
}
@Override
public double calculateDiscount() {
return getPrice()*percent;
}
public double getPercent() {
return percent;
}
public void setPercent(double percent) {
this.percent = percent;
}
}
/**
* 策略模式:Strategy Pattern
*
* 图书折扣的计算:
* 1、无折扣
* 2、固定折扣(例如:提供10元的折扣)
* 3、百分比折扣(例如:提供7%的折扣)
*
* @verison 2009-05-20
* @author Winty (wintys@gmail.com)
*
*/
public class StrategyTest {
public static void main(String[] args) {
double discount = 0;
Book book = new Book(88.5);
book.setStrategy(new NoDiscountStrategy());
discount = book.getDiscount();
System.out.println("折扣:" + discount);
book.setStrategy(new FlatDiscountStrategy(10));
discount = book.getDiscount();
System.out.println("折扣:" + discount);
book.setStrategy(new PercentageDiscountStrategy(0.07));
discount = book.getDiscount();
System.out.println("折扣:" + discount);
}
}
/**
* 环境(Context)
* @author Winty
*
*/
class Book{
private double price;
private DiscountStrategy strategy;
public Book(double price){
this.price = price;
}
/**
* 调用Strategy的策略方法进行计算
* @return 折扣数额
*/
public double getDiscount(){
strategy.setPrice(price);
return strategy.calculateDiscount();
}
public DiscountStrategy getStrategy() {
return strategy;
}
public void setStrategy(DiscountStrategy strategy) {
this.strategy = strategy;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
/**
* 抽象策略:Strategy
* @author Winty
*
*/
abstract class DiscountStrategy{
private double price;
public DiscountStrategy(){
}
/**
* 策略方法
* @return 折扣数额
*/
public abstract double calculateDiscount();
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
/**
* 具体策略:无折扣算法
* @author Winty
*
*/
class NoDiscountStrategy extends DiscountStrategy{
public NoDiscountStrategy(){
}
@Override
public double calculateDiscount(){
return 0.0;
}
}
/**
* 具体策略:固定量折扣算法
* @author Winty
*
*/
class FlatDiscountStrategy extends DiscountStrategy{
private double amount;
public FlatDiscountStrategy(double amount){
this.amount = amount;
}
@Override
public double calculateDiscount() {
return amount;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
}
/**
* 具体策略:百分比折扣策略
* @author Winty
*
*/
class PercentageDiscountStrategy extends DiscountStrategy{
private double percent;
public PercentageDiscountStrategy(double percent){
this.percent = percent;
}
@Override
public double calculateDiscount() {
return getPrice()*percent;
}
public double getPercent() {
return percent;
}
public void setPercent(double percent) {
this.percent = percent;
}
}
原创作品,转载请注明出处。
作者:Winty (wintys@gmail.com)
博客:http://www.blogjava.net/wintys
作者:Winty (wintys@gmail.com)
博客:http://www.blogjava.net/wintys
发表评论
-
[原]导出CodeHelp的数据
2009-03-16 17:05 861搬到blogjava总得发点原创的东西吧。 Code ... -
[原]使用Ant实现zip压缩解压功能
2009-03-19 13:17 1722[关键词]:ant,zip,unzip,Apache,压缩,解 ... -
[原]EL函数的使用
2009-04-03 21:29 1122[标题]:EL函数的使用 [时 ... -
[原]对Class.getMethod()的调用未经检查
2009-04-05 15:52 2365[标题]:对Class.getMethod()的调用未经检查 ... -
[原]JNI简单示例
2009-04-05 21:33 1040[标题]:JNI简单示例 [时 ... -
[原]简单工厂模式
2009-04-14 12:26 755[关键字]:java,设计模式,简单工厂,《java与模式》 ... -
[原]工厂模式
2009-04-14 12:32 735[关键字]:java,design pattern,设计模式, ... -
[原]抽象工厂模式
2009-04-14 19:25 761[关键字]:java,design pattern,设计模式, ... -
[原]方法返回值为数组的另一种表示方法
2009-04-25 22:28 979[时间]:2009-04-25 今天看到JDK的源代码 ... -
[原]SAX使用示例
2009-04-26 19:18 2053[标题]:[原]SAX使用示例 [时间]:2009-4-25 ... -
[原]责任链模式
2009-05-09 16:47 738[关键字]:java,design pattern,设计模式, ... -
[原]状态模式
2009-05-18 23:03 840[关键字]:java,design pattern,设计模式, ... -
[原]VC实现重启路由器
2009-05-29 23:36 2082[标题]:[原]VC实现重启路 ... -
[原]远程登录Windows Server 2003的当前会话
2009-06-01 11:19 2075[标题]:远程登录Windows Server 2003的当前 ... -
[原]Tomcat crossContext
2009-06-01 12:27 6104[标题]:Tomcat crossContext [时间]:2 ... -
[原]装饰模式1
2009-06-07 22:33 717[关键字]:java,design pattern,设计模式, ... -
[原]装饰模式3-Grep
2009-06-07 22:42 702[关键字]:java,design pattern,设计模式, ... -
[原]合成模式-透明的
2009-06-08 22:23 766[关键字]:java,design pattern,设计模式, ... -
[原]合成模式-安全的
2009-06-08 22:27 842[关键字]:java,design pattern,设计模式, ... -
[原]模板方法模式
2009-06-15 17:05 678[关键字]:java,design pattern,设计模式, ...
相关推荐
### 物件導向策略模式解析 #### 一、引言 物件導向程式設計(Object-Oriented Programming, OOP)是一種重要...遵循物件導向設計的三個原則,我們可以更好地利用策略模式來解決實際問題,提高程式的可維護性和擴展性。
策略模式定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,策略对象改变算法的执行策略;职责链模式避免将请求的发送者和接收者耦合在一起,而是将这些对象连成一条链,并沿着这条链传递请求,直到有...
1)程序功能:用策略模式实现商场收银系统,采用PHP编写。 2)程序详解地址:http://blog.csdn.net/clevercode/article/details/45722661。 3)原创作品,出自"CleverCode的博客",分类为《设计模式之PHP项目应用》...
策略模式 观察者模式 状态模式 导入模式 迭代器模式 命令模式 职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - ...
在给定的压缩包文件中,我们可以看到涉及到九种基本的设计模式,它们分别是:组合模式(Composite)、策略模式(Strategy)、外观模式(Facade)、观察者模式(Observer)以及单例模式(Singleton)。接下来,我们将...
4. **行为型模式**:如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、责任链模式(Chain of Responsibility)、命令模式(Command)、迭代器模式(Iterator)、访问者模式...
5G网络的演进策略正越来越多地依赖于云原生技术,以适应高速率、低延迟、高可靠性的行业特定应用场景。 【5G网络服务化架构】 5G网络基于服务化架构,这一架构使得网络功能模块化,能够灵活组合并按需提供服务。...
本文旨在深入探讨纯原创电商服装品牌的营销发展模式,分析其在新时代背景下的机遇与挑战,并提出相应的策略。 首先,电商平台的发展趋势对服装品牌营销具有重要影响。在5G时代,电商行业的变化日新月异,视频时代、...
1)程序功能:用策略模式实现自动驾驶系统,采用PHP编写。 2)程序详解地址:http://blog.csdn.net/clevercode/article/details/45723773。 3)原创作品,出自"CleverCode的博客",分类为《设计模式之PHP项目应用》...
其中包括责任链模式、命令模式、迭代器模式、访问者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。责任链模式通过建立处理请求的对象链,使得请求可以在链上传递,直到被某个对象...
在JavaScript中,设计模式是一种通用的、可...策略模式提供了添加、切换验证规则的能力,装饰模式确保了验证在提交之前正确执行,而无需改变原函数的结构。这种设计使得代码更易于维护,也更容易适应未来的需求变化。
10. 策略模式:定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换,策略模式让算法的变化独立于使用算法的客户。 通过结合PPT的学习和源码的实践,你将能够更好地理解这些设计模式,从而提升你的编程...
3. 行为型模式:这些模式关注对象之间的交互和职责分配,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。在JavaScript中...
* Strategy(策略模式):使用不同的策略来实现不同的算法。 * State(状态模式):使用状态机来实现对象的状态转换。 * Observer(观察者模式):使得对象能够观察其他对象的变化。 * Visitor(访问模式):提供了...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在JavaScript中,策略模式的应用可以帮助我们更好地组织代码,提高代码的可扩展性和可维护性。以下是对策略模式的详细解析: 首先,策略模式的核心...
忻定原城镇组群空间组织模式及发展策略研究,彭翀,常黎丽,本文以我国中部地区为例,随着城镇化全面推进和城市群蓬勃发展,城市群内部空间组织模式对于城市群空间目标的实现、城市间的发展
### 修改和定制Android音频策略 #### 一、引言 随着智能设备的普及和技术的发展,车载导航仪等移动终端的功能日益强大,对于音频输出的需求也更加多样化。Android系统作为目前主流的操作系统之一,在多媒体处理...
行为型模式关注对象间的行为分配,如策略模式、观察者模式、访问者模式、责任链模式、命令模式、解释器模式、迭代器模式、备忘录模式、状态模式、模板方法模式和访问者模式,它们处理对象间的通信和行为。...
在《总体审计策略记录模式范例》中,方圆公司的审计范围覆盖了A类原材料和B种产成品的盘点工作。原材料和产成品的管理直接关联着企业的供应链和生产流程,是评价企业财务健康状况的重要指标。此外,考虑到能源是现代...
供应链管理采购模式策略分析还可以降低企业的原材料、零部件的库存水平,降低管理费用,加快资金周转。在质量方面,由于供应商的数量少而且企业可以参与到供应商的生产组织过程和有关质量控制过程中去,能够对采购的...