引用:STRATEGY—跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,但是目的都是为了得到MM的芳心,我的追MM锦囊中有好多Strategy哦。
策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。
以上为转载 .
看了这个果然,有助于提高对设计模式得理解.但讲得比较大概.我想详细得讲解一下.
跟MM 约会的活动,开始的时候要有一定计划,所谓得计划就是要有一定的目标,首先要明确活动的大体框架,看电影?买东西?滑雪?,想好了之后我就写个追MM得基本类把.代码设计如下:
public class CheasingGirls{
public void movie(){
//活了那么久了 ,怎么和MM看电影,自己想去.
}
public void shopping(){
//活了那么久了 ,怎么和MM购物自己想去.
}
}
哈哈.基本计划有了,具体想如果 追 MM A 得话,我们就可以写一个类来继承与它.
public class CheasingGirlsA extends CheasingGirls{
//可以重新定计划(覆盖父方法)
public void movie(){
//活了那么久了 ,怎么和MM看电影,自己想去.
}
//可以重新定计划(覆盖父方法)
public void shopping(){
//活了那么久了 ,怎么和MM购物自己想去.
}
}
但是问题出来了...对我这样老实的人来说 ,一个也就够了,对 想追很多MM得人来说,那就很辛苦了..还可能出现问题,并不是每个MM都喜欢看电影,滑雪等等.所以我们继承CheasingGirls类就会出现.要覆盖 父方法的情况 如追MM B
public class CheasingGirlsB extends CheasingGirls{
//可以重新定计划(覆盖父方法)
public void movie(){
//什么都不做
}
//可以重新定计划(覆盖父方法)
public void shopping(){
//什么都不做
}
}
如果我要追 几十个.那都要重写 .要累死啊 ..所以 我就把,movie 和 shopping的方法 改为用接口来做 .
public interface Movie{
public void doMovie();
}
public interface Shopping{
public void doShopping();
}
改变下我追MM的计划类
public class CheasingGirls{
Movie movie;
Shopping shopping;
public void movie(){
movie.doMovie();
}
public void shopping(){
shopping.doShopping();
}
}
看看这样设计带来的好处,我可以写几套不同的看电影计划购物计划,而对代码没有影响.可以重用 ,多方便啊.....以后组组合合就可以了.还回为追MM发愁啊?
代码如下是:
//电影方案1
public class movie1 implements Movie{
public void doMovie(){
//方案一具体 实施方案.
}
}
如果我们在泡MM A 之前,定义好计划得话 代码如下
public class CheasingGirlsA extends CheasingGirls{
public CheasingGirlsA(){
movie = new movie1();
}
}
但这么做 有缺点,,一旦 MM 不喜欢的话,临时就不能换计划了......MM 真难搞定呢...所以我们就必须想个方法,在约会时可以改变计划.
我们就在约会得时候改变.
改变下我追MM的计划类
public class CheasingGirls{
Movie movie;
Shopping shopping;
public void movie(){
movie.doMovie();
}
public void shopping(){
shopping.doShopping();
}
public void setMovie(Movie movie){
this.movie = movie;
}
}
在追MM得过程中 我就可以这么写
^_^.看电影得计划成功了....希望大家都可以追成你心中得MM.
CheasingGirls cheasingGirls = new CheasingGirls();
//看电影计划 movie1
cheasingGirls .setMovie(new movie1());
cheasingGirls .doMovie();