实现鸭子的行为(飞行类)
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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!