还是小刚替小明写作业,小明只要给小刚作业。
不过数学作业有数学作业的写法,语文作业有语文作业的写法,英语作业有英语作作业业的写法。这些都需要小刚进行判断,小明给我什么我就写什么。我最后只要让老师看到小明作业完成了就行。
这个逻辑怎么写?
首先我们需要一个作业的抽象类,里面主要的方法是一个doHomework()的抽象方法。数学语文英语作业分别继承了这个类
public abstract class Homework {
private String name;
public Homework(String name) {
this.name = name;
}
public abstract void doHomework();
protected String getName() { return name; }
}
数学、语文、英语类因为写的方法都不一样所以重写了doHomework()方法。这里仅以数学为例。
public class MHomework extends Homework {
public MHomework(String name) {
super(name);
}
public void doHomework() {
System.out.println(getName()+"完成了数学作业");
}
}
有个帮人写作业的类,既然是帮人写作业那你也要给我我才能写呀。这里把作业在构造器中传入。
public class Server {
Homework homework;
public Server(Homework homework){
this.homework = homework;
}
public void doHomework(){
homework.doHomework();
}
}
最后看看场景
public class Client {
public static void main(String[] args) {
Homework hw = new MHomework("小明");
Server xiaoGang = new Server(hw);//小刚写小明的作业
xiaoGang.doHomework();
}
}
运行结果:
小明完成了数学作业
策略模式很像静态代理模式很像
区别是封装角色与实际策略类的父类不同
而代理类与被代理类则有着相同的接口。
策略模式和命令模式也很像但是关注的重点不同
命令模式的invoker封装的是不同种类的命令。重点在结果。
而策略模式的封装角色,是为了封装的是完成同一命令的不同算法。重点在过程。
就像买东西你用支付宝和微信都可以而且支付一次就够了,因为结果都是一样的。