设计模式学习--策略模式(Strategy Pattern)

本文介绍了如何使用策略模式来实现鸭子设计,使得不同类型的鸭子(如会飞、不会飞、会叫、不会叫)可以通过继承和策略接口实现行为的替换。这种设计提高了代码的复用性和灵活性,符合良好面向对象设计原则。
摘要由CSDN通过智能技术生成

实现鸭子的行为(飞行类)

package strategyPattern;

public class FlyWithWings implements FlyBehavior {

@Override

public void fly() {

//实现鸭子飞行

System.out.println(“I’m flying!”);

}

}

package strategyPattern;

public class FlyNoWay implements FlyBehavior {

@Override

public void fly() {

//什么都不做,不会飞

System.out.println(“I can’t fly”);

}

}

public class FlyRocketPowered implements FlyBehavior {

@Override

public void fly() {

System.out.println(“I’m flying with a rocket!”);

}

}

实现鸭子的行为(呱呱叫)

package strategyPattern;

public class Quack implements QuackBehavior {

@Override

public void quack() {

//实现鸭子呱呱叫

System.out.println(“Quack”);

}

}

package strategyPattern;

public class Squack implements QuackBehavior {

@Override

public void quack() {

//橡皮鸭子叽叽叫

System.out.println(“Squack”);

}

}

package strategyPattern;

public class MuteQuack implements QuackBehavior {

@Override

public void quack() {

// 什么都不做,不会叫

}

}

整合鸭子的行为,让不同的鸭子继承鸭类(Duck)

package strategyPattern;

/**

  • 绿头鸭继承鸭类

  • @author wwj

*/

public class MallardDuck extends Duck{

/**

  • 因为MallardDuck继承Duck类,所以具有flyBehavior与quackBehavior实例变量

*/

public MallardDuck() {

quackBehavior = new Quack(); //真正的呱呱叫

flyBehavior = new FlyWithWings(); //会用翅膀飞

}

public void display() {

System.out.println(“I’m a real Mallard duck”); //我是一个真正的绿头鸭

}

}

package strategyPattern;

public class RedheadDuck extends Duck{

public RedheadDuck() {

flyBehavior = new FlyWithWings();

quackBehavior = new Quack();

}

@Override

public void display() {

System.out.println(“I’m a RedheadDuck!!”); //红头鸭

}

}

package strategyPattern;

public class RubberDuck extends Duck{

public RubberDuck() {

}

@Override

public void display() {

System.out.println(“I’m a RubberDuck!!!”);

}

}

package strategyPattern;

public class ModelDuck extends Duck {

public ModelDuck() {

flyBehavior = new FlyNoWay(); //不会飞

quackBehavior = new Quack(); //会叽叽叫

}

@Override

public void display() {

System.out.println(“I’m a model duck”);

}

}

package strategyPattern;

public class DecoyDuck extends Duck{

public DecoyDuck(){

}

@Override

public void display() {

System.out.println(“I’m a DecoyDuck!!!”); //我是一只诱饵鸭

}

}

测试类:

package strategyPattern;

public class MiniDuckSimulator {

public static void main(String[] args) {

Duck mallard = new MallardDuck();

mallard.performQuack();

mallard.performFly();

//动态改变模型鸭的行为–通过调用继承来的setter方法

Duck model = new ModelDuck();

model.performFly();

model.setFlyBehavior(new FlyRocketPowered()); //委托

model.performFly();

}

}

测试结果:

Quack

I’m flying!

I can’t fly

I’m flying with a rocket!

确实,使用策略模式之后,代码变得可复用了,可以适应更多的变化,而不会互相影响。良好的oo设计必须具备可复用、可扩充、可维护三个特性。模式是前人历经验证的经验,可以用来解决程序设计当中的各种问题。

尾声

开发是需要一定的基础的,我是08年开始进入Android这行的,在这期间经历了Android的鼎盛时期,和所谓的Android”凉了“。中间当然也有着,不可说的心酸,看着身边朋友,同事一个个转前端,换行业,其实当时我的心也有过犹豫,但是我还是坚持下来了,这次的疫情就是一个好的机会,大浪淘沙,优胜劣汰。再等等,说不定下一个黄金浪潮就被你等到了。

  • 330页 PDF Android核心笔记

  • 几十套阿里 、字节跳动、腾讯、华为、美团等公司2020年的面试题

  • PDF和思维脑图,包含知识脉络 + 诸多细节

  • Android进阶系统学习视频

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

节跳动、腾讯、华为、美团等公司2020年的面试题**

[外链图片转存中…(img-wCnkmLUx-1714693235943)]

[外链图片转存中…(img-iNQrtN2M-1714693235944)]

  • PDF和思维脑图,包含知识脉络 + 诸多细节

[外链图片转存中…(img-IwFkrJfs-1714693235944)]

  • Android进阶系统学习视频

[外链图片转存中…(img-E4qdJduu-1714693235945)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值