设计模式之策略模式

还是小刚替小明写作业,小明只要给小刚作业。
不过数学作业有数学作业的写法,语文作业有语文作业的写法,英语作业有英语作作业业的写法。这些都需要小刚进行判断,小明给我什么我就写什么。我最后只要让老师看到小明作业完成了就行。
这个逻辑怎么写?
首先我们需要一个作业的抽象类,里面主要的方法是一个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封装的是不同种类的命令。重点在结果。
而策略模式的封装角色,是为了封装的是完成同一命令的不同算法。重点在过程。
就像买东西你用支付宝和微信都可以而且支付一次就够了,因为结果都是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值