活到老,学到老

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  9 Posts :: 1 Stories :: 2 Comments :: 0 Trackbacks

2011年4月5日 #

     摘要:     概念:观察者模式定义了一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。     举个网上商城的例子,比如很多顾客对某个商品感兴趣,把商品收藏,当该商品降价、促销、有货了等事件发生时,就会发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 * 160
;
        
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)编辑 收藏

     摘要:     这篇写一个简单的HelloWorld例子。     首先准备环境,我使用的JDK1.6,1.5应该也可以。还需要去oracle下载JMX RI包,地址为:http://www.oracle.com/technetwork/java/javase/tech/download-jsp-141676.html,下载...  阅读全文
posted @ 2011-04-05 16:20 simon.shen 阅读(2950) | 评论 (1)编辑 收藏