`
ysen
  • 浏览: 119325 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

老公爱吃的菜(策略模式)

阅读更多

将策略的上下文的构造函数换用简单工厂模式的话就将业务对象封装起来了,客户端就只要了解Boy这个对象就ok了 ,不需要自己去声明接口DreamGir的业务对象l。

 

//上下文
public class Boy {

	private DreamGirl girl;

	Boy(DreamGirl girl) {

		this.girl = girl;
	}

	public void want_to_eat() {

		girl.prepare_food();

	}

	public DreamGirl getGirl() {
		return girl;
	}

	public void setGirl(DreamGirl girl) {
		this.girl = girl;
	}

	public static void main(String[]args){
		DreamGirl 韩媛媛 = new BeautifulGirl();
		Boy ysen = new Boy(韩媛媛);
		ysen.want_to_eat();
		
		
	}
}

 

 

//男孩心中抽象的梦中女孩
public abstract class DreamGirl {
	//准备食物方法
	public abstract void prepare_food();

}

 

public class LivelyGirl extends DreamGirl{

 
	public void prepare_food() {
		
		System.out.println("老公喜欢我做的酸菜鱼");
		
	}

}

 

//相貌平平的女孩 呵呵
public class LooksMediocreGirl extends DreamGirl{

	 
	public void prepare_food() {
	 
		System.out.println("老公喜欢我做的糖醋里脊");
	}

}

 

//一位漂亮的女孩呵呵
public class BeautifulGirl extends DreamGirl {

 
	public void prepare_food() {
		
		System.out.println("老公喜欢我做的土豆炖肉嘿嘿");
	}

}

 

//一位理智的女孩 呵呵
public class SensibleGirl extends DreamGirl{

 
	public void prepare_food() {
	 
		System.out.println("老公喜欢我做的鱼香肉丝");
	}
	
	

}

 

 

老公喜欢我做的土豆炖肉嘿嘿

 

介于部分朋友觉得内容不太露骨,(老鸟略过) 感觉不出策略思想到底是用来解决样的什么问题。

首先策略思想它强调的是用组合来封装原有的动态行为方法。

变化的行为用组合 has a

不变的行为用继承 is  a

 

 

下面我来改下Boy类

 

//上下文
public class Boy {

	private DreamGirl girl;

	Boy(DreamGirl girl) {

		this.girl = girl;
	}

	public void want_to_eat() {

		girl.prepare_food();

	}//参照上面的Boy类这个行为方法很明显是变化的,所以我们需要抽象这个方法,就是通过美女接口以及具体的业务实现类(不同的girl)
             public void prepare_food() {
	 
		//System.out.println("老公喜欢我做的鱼香肉丝");
	}

	public DreamGirl getGirl() {
		return girl;
	}

	public void setGirl(DreamGirl girl) {
		this.girl = girl;
	}

	 
}

  很明显我的 prepare_food() 行为是变化的,我这里用的只能是组合,声明接口DreamGirl是为了可以实现不同的业务类型(不同的女孩),现在的情况是DreamGirl依赖于Boy 但是却实现了业务的变化,我们这里完全可以通过spring 来降低耦合

 

 

 

 

 

 

分享到:
评论
15 楼 dopic 2009-12-07  
什么跟什么
14 楼 tomorrow009 2009-12-07  
LZ不过就是想用比较活泼的方式描述一下策略模式而已。我觉得说的挺好,浅显易懂。
13 楼 jashawn 2009-12-07  
女人们都喜欢自己的老公在众人面前晒自己,
ysen在je上晒“韩媛媛”,引入“命令模式”处理此“晒”的事件,
于是韩媛媛笑了,众围观jrs或纷纷表示不解,或纷纷表示无聊,整个事件皆为“观察者模式”所驱动。
当韩媛媛心情变为happy时,引入“状态模式”处理其心情,
出于封装原因,其内部实现围观众人不得而知,盼ysen示之。
12 楼 hanamichi10 2009-12-07  
dieslrae 写道
想表达什么......


公喜欢我做的土豆炖肉嘿嘿...

楼主喜欢漂亮的女孩子呗...
11 楼 夜之son 2009-12-07  
抽象,咱来点更抽象的吧。
10 楼 flyliying 2009-12-07  
建议楼主加上简单的说明
9 楼 topcode 2009-12-07  
同上上上,也不知道 要表达什么具体的问题~
8 楼 咖啡猪猪 2009-12-07  
最好直接一张关系图拿出来,省得看得云里雾去
7 楼 rodneytt 2009-12-07  
有点意思哦
6 楼 egooooo 2009-12-07  
同感,没明白想说什么
5 楼 mwmw 2009-12-07  
哎,一遍一遍的用现实的东西去模拟...

不知道说什么...

up...
4 楼 ysen 2009-12-06  
mccxj 写道
陪她们依次去旅游(装饰模式)
女友多的好处 (简单工厂模式)

还有这个。。。都挺无聊的帖子,不发也罢~~
ps:我发现我也挺无聊的,去看这样的帖子~~

将策略的上下文的构造函数换用简单工厂模式的话就将业务对象封装起来了,客户端就只要了解Boy这个对象就ok了 ,不需要自己去声明接口DreamGir的业务对象l。
----------
但是代码里边也还是写了具体哪个业务对象~~

这两天确实挺无聊的哈哈~
3 楼 ysen 2009-12-06  
mccxj 写道
陪她们依次去旅游(装饰模式)
女友多的好处 (简单工厂模式)

还有这个。。。都挺无聊的帖子,不发也罢~~
ps:我发现我也挺无聊的,去看这样的帖子~~

将策略的上下文的构造函数换用简单工厂模式的话就将业务对象封装起来了,客户端就只要了解Boy这个对象就ok了 ,不需要自己去声明接口DreamGir的业务对象l。
----------
但是代码里边也还是写了具体哪个业务对象~~

策略和简单工厂模式配合下:
将策略的构造函数 换成简单工厂模式 就不需要客户端自己写业务对象了
2 楼 mccxj 2009-12-06  
陪她们依次去旅游(装饰模式)
女友多的好处 (简单工厂模式)

还有这个。。。都挺无聊的帖子,不发也罢~~
ps:我发现我也挺无聊的,去看这样的帖子~~

将策略的上下文的构造函数换用简单工厂模式的话就将业务对象封装起来了,客户端就只要了解Boy这个对象就ok了 ,不需要自己去声明接口DreamGir的业务对象l。
----------
但是代码里边也还是写了具体哪个业务对象~~
1 楼 dieslrae 2009-12-06  
想表达什么......

相关推荐

Global site tag (gtag.js) - Google Analytics