二十三种设计模式(十三)策略模式

当一类事物有多种不同的实现方式且后续仍有扩展的可能性时,可以先定义一个统一接口,让所以调用该事务的方法定义时均传入该接口。

实际调用时,根据实际情况传入该接口的不同实现,也就是不同的策略。扩展时,只要新增类实现上述统一接口,即可作为新的策略以供调用。本质上是多态的应用

/**

* 王者荣耀英雄猴子

* */

public class Sunwukong {

//默认使用原始皮肤

public Skin skin= new OriginalSkin();

//默认构造方法不传入皮肤

public Sunwukong(){

}

//构造时传入皮肤接口,当用户创建英雄时,可以传入实现皮肤接口的实例皮肤覆盖原始皮肤

public Sunwukong(Skin skin){

this.skin=skin;

}

}

/**

* 皮肤接口,后面所有的皮肤都要实现里面的方法

* */

public interface Skin {

//释放技能

public void relaese();

}

/**

* 原始皮肤释放技能无特效

* */

public class OriginalSkin implements Skin{

@Override

public void relaese() {

System.out.println("释放技能无特效");

}

}

/**

* 地狱火皮肤释放技能全身变红

*/

public class DiyuhuoSkin implements Skin{

@Override

public void relaese() {

System.out.println("释放技能全身变红");

}

}

/**

* 至尊宝皮肤释放技能全身变蓝

* */

public class ZhizunbaoSkin implements Skin{

@Override

public void relaese() {

System.out.println("释放技能全身变蓝");

}

}

public class Main {

public static void main(String[] args) {

//这个猴子没特效

Sunwukong s1 =new Sunwukong();

s1.skin.relaese();

//这个猴子地狱火皮肤,有特效

Sunwukong s2 = new Sunwukong(new DiyuhuoSkin());

s2.skin.relaese();

//这个猴子至尊宝皮肤,也有特效

Sunwukong s3 = new Sunwukong(new ZhizunbaoSkin());

s2.skin.relaese();

}

}

运行结果:

释放技能无特效

释放技能全身变红

释放技能全身变红

说明:后续出新皮肤只要实现皮肤接口即可.按照不同特效实现relaese()方法。调用的时候传入新的皮肤实例就可以完成扩展。而且低耦合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值