模式分解--策略模式初探
来源:互联网 发布:网络进度计划图 编辑:程序博客网 时间:2024/05/19 08:05
策略模式:定义算法族,分别封装起来、让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
针对接口编程与针对实现编程的区别:
A:针对实现编程:
Dog dog = new Dog() ;
dog.run();
B:针对接口编程:
Animal animal = new Dog();
animal.run();
策略模式简单例子如下:
说明:
1、抽象类:
Public abstract class Dog{
// 跳跃行为接口
JumpBehavior jumpBehavior:
// 奔跑行为接口
RunBehavior runBehavior;
public dog(){};
public abstract void display();
public void playRun(){
runBehavior.run();
}
public void playJump() {
runBehavior.jump();
}
// 构造方法
public void setJumpBehavior(JumpBehavior jumpBehavior1){
this.jumpBehavior = jumpBehavior1
}
public void setRunBehavior(RunBehavior runBehavior1){
this.runBehavior = runBehavior1
}
}
// 海狗不能跑,不能跳
Public class SeaDog extends Dog{
public SeaDog(){
jumpBehavior = new NoJumpDog();
// 奔跑行为接口
runBehavior = new NoRunDog();
};
public void display() {
System.out.println("I am seaDog");
}
}
//正常狗能跑,能跳
Public class NorDog extends Dog{
public NorDog(){
// 通过接口访问到跳的实现类
jumpBehavior = new JumpDog();
// 通过接口访问到跑的实现类
runBehavior = new RunDog();
};
public void display() {
System.out.println("I am normal Dog");
}
}
// 模型狗不能跑,不能跳
Public class ModelDog extends Dog{
public ModelDog(){
jumpBehavior = new NoJumpDog();
// 奔跑行为接口
runBehavior = new NoRunDog();
};
public void display() {
System.out.println("I am ModelDog");
}
}
2、行为接口
Public interface JumpBehavior {
public void jump();
}
Public interface RunBehavior {
public void run();
}
// 可以跳的
Public class CanJumpDog implements JumpBehavior{
public void jump() {
System.out.println("I can jum");
;
}
// 不能跳的
Public class NoJumpDog implements JumpBehavior{
public void jump() {
System.out.println("I can't jum");
}
}
;
// 可以跑的
Public class CanRunDog implements RunBehavior{
public void run() {
System.out.println("I can Run");
}
}
// 不能跑的
Public class NoRunpDog implements RunBehavior{
public void run() {
System.out.println("I can't Run");
}
}
测试运行代码:
Public Class testDog{
Public static void mail(String[] args){
Dog dog = new NorDog();
dog.playRun();//输出能跑
dog.playJump();//输出能跳
Dog dog = new ModelDog();
dog.playRun();//输出不能跑
dog.playJump();//输出不能跳
JumpBehavior canJump = new CanJumpDog();
// 输入可跳行为
dog.setJumpBehavior(canJump)
dog.playJump();//输出能跳
}
}
总结:少用继承、多用组合。
- 模式分解--策略模式初探
- 策略模式初探
- 设计模式初探-策略模式
- 设计模式初探-策略模式
- 模式分解——适配器模式初探
- 【初探第二章】 策略模式
- 设计模式初探之策略模式
- 基于c++的策略模式初探。
- Android开发之策略模式初探
- 设计模式初探-策略模式(STRATEGY),别名政策(Policy)
- 初探PHP面向对象与设计模式-策略模式
- 模式分解
- 初探开发者模式——Strategy模式(策略者模式)
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 从服务端(PC)下载apk,显示进度
- Learn UML with JUDE<转>
- 如何实现CAPP、CMainFrame、CViEW和CDOC之间相互调用?
- Android调用天气预报的WebService简单例子
- 关于AREA和ENTRY的理解
- 模式分解--策略模式初探
- 一步一步学linux之——virtualbox 运行 ubuntu 与主机 windows 文件共享
- Unity3D优化之Draw Call Batching
- javamysql4/8
- c++中static成员函数和const成员函数特点
- Android中使用webservice验证用户登录的示例
- Android 应用程序(进程)生命周期
- weka内存不够时
- 关于c++临时对象产生的规则