设计模式之strategy(策略模式)
来源:互联网 发布:淘宝网怎么解绑手机号 编辑:程序博客网 时间:2024/06/10 09:13
我们经常需要比较两个对象,或者形成一个行为策略,而究竟采用哪一种策略呢?是把策略写死在函数里?如果我们商城打折,那每次都得修改这个函数?或许我们可以把策略抽取程一个类,用面向对象来解决,后文加上了用配置文件来修改这种策略,使得其更加灵活(用到反射)
comparator
如果我们要实现某两个类的比较机制,可以实现comparable接口,实现里面的compareTo()方法,那么我们就可以实现二者比较了
package com.ylf.compare;
public
}
假设我们这里的比较类是Computer
package com.ylf.compare;
import
public
}
}
}
}
}
}
}
那么我们在Main里面比较很简单,只需要简单调用CompareTo方法就可以了
package com.ylf.compare;
public
}
}
但是问题来了,如果我们要比较的不是价格,而是电脑性能了怎么办呢?
很简单,改下compareTo()方法就可以了,但是这样还是很麻烦,如果我们希望在一个配置文件里实现比较策略,那么这样就不行了,从面向对象角度出发,比较的物体是对象,比较这个过程或者说比较这个策略我们是否也可以看成一个对象?
假设我们有Comparator这个比较策略,在compareTo()方法里调用这个比较策略来实现返回比较结果,如果我们比较价格,那就创建一个PriceComparator
也就是让我们的电脑实体拥有一个比较器(comarator)这个比较器专门用来比较,至于怎么比较那就是比较器实现问题!这里用组合形式降低了类之间的耦合度
形容的在恰当点,二者要发生关系,如果太死板,没啥花样,每次都一样,容易厌倦,如果把二者发生的这个关系抽象出一个类,那么每次玩啥花样呢?不用想,直接去买一个中介,每次都很不一样啦!
首先添加一个比较器,这里作为抽象类
package com.ylf.compare;
public
}
computer类里改变就是添加了一个比较器的持有,同时比较方法采用比较器进行
package com.ylf.compare;
import
public
}
}
}
}
}
}
}
}
}
假设我们这里实现了性能比较器
package com.ylf.compare;
public
}
}
那么Main里比较就只要借助Computer对象里的比较器进行就可以
package com.ylf.compare;
public
}
}
如果我们有一个配置文件,记录了比较器的选择,那么修改他就好了,然后在Main 方法里
package com.ylf.compare;
public
}
}
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy模式(策略模式)
- 设计模式之strategy策略模式
- 设计模式(DesignPattern)之策略模式(Strategy)
- 设计模式之策略模式(Strategy)
- 设计模式之Strategy(策略模式)
- Flex tree增加,删除,查询并定位节点
- 【转】Linux下安卓开发手机驱动问…
- java io(输入输出)小结
- hdu4352 XHXJ's LIS
- 资格赛:拯救宇宙
- 设计模式之strategy(策略模式)
- MSVCRTD.lib(crtexew.obj) :&…
- 算法习题1:二叉树实现增删改查
- 将博客搬至CSDN
- 算法习题2:将二叉树转换成双向链表
- 算法习题3:设计包含min函数的栈
- 搞清九个先后顺序
- 二叉树前序、中序、后序遍历相互求法
- Creating a Component with a variable number of output parameters(创建一个动态输出参数的计算器)