对于一个初学者来说,通俗易懂的话可能更容易让人明白。看了看网上的资料,用的辞藻都比较术语话,专业化,这叫我比较愤恨。不过术语话的东西很容易让人产生遐想和思考,对某些人来讲,效果还是很好的。
看了一些东西,我不太喜欢将别人的话照抄,但也不能保证我说的就一定是对的。只是把我的思考分享出来。
现在有两个例子:
1)小明的妈妈叫小明去菜市场买菜,出家门前,妈妈给了他2个纸条,还告诉他,如果遇到卖菠菜的,看下第一个纸条,上面有买菠菜的斤数,遇到卖芹菜的,看下第二个纸条,上面有买芹菜的斤数。
(第一张纸条上的信息:菠菜买3斤;)
(第二张纸条上的信息:芹菜买4斤;)
2)小明的妈妈叫小明去菜市场买菜,出家门前,妈妈给了他1个纸条,还告诉他,出去买菜的时候看下纸条,上面有要买什么菜,和买多少的信息。
(纸条上写着如果碰到菠菜买3斤,如果碰到芹菜买4斤;)
现在将例子程序化:
1)
public interface BuyVegetable
{
public int buyVegetableNum();
}
class BuySpinach implements BuyVegetable
{
public int buyVegetableNum()
{
return 3;
}
}
class BuyCelery implements BuyVegetable
{
public int buyVegetableNum()
{
return 4;
}
}
2)
public interface BuyVegetable1
{
public int buyVegetable(String nameOfVegetableThatYouSee0);
}
class BuyNum implements BuyVegetable1
{
public int buyVegetable(String nameOfVegetableThatYouSee0)
{
if(nameOfVegetableThatYouSee0=="spinach")
{
return 3;
}
else if(nameOfVegetableThatYouSee0=="celery")
{
return 4;
}
else
{
return 0;
}
}
}
测试程序:
public class BuyTest
{
public static void main(String[] args)
{
BuyVegetable buy = new BuySpinach();
System.out.println(buy.buyVegetableNum());
BuyVegetable buy1 = new BuyCelery();
System.out.println(buy1.buyVegetableNum());
BuyVegetable1 bv = new BuyNum();
String whatYouSee ="spinach";
System.out.println(bv.buyVegetable(whatYouSee));
}
}
测试结果:
3
4
3
第一个例子,我们可以称它为策略模式,你需要知道每一个实现例是针对什么环境,你已经知道前端的情况,寻找适合它的这种情况的实现方法。
第二个例子:我们无需知道具体有哪些实现例,也无需判断前端发生了什么,只需要直接使用实现例,实现例会帮我们判断,这不属于策略模式。
所以策略模式的优缺点也就显而易见了: