设计模式是什么?在这篇笔记中有介绍【java–设计模式】单例模式Singleton
策略模式Strategy什么呢?
策略模式是行为型模式(用来解决类或对象之间的交互,更合理的优化类或对象之间的关系)
用来控制流程的,流程是固定的(设计一个抽象方法),每个流程在不同的情况下是不一样的(具体实现,设计不同的子类)
其实策略模式就是对 多态 的运用
用一个小例子来体现策略模式Strategy
设计一个银行Bank类,里面设计一个方法profession(等待用户来办理业务)
客户进银行都会执行这三个方法:
- 叫一个号码–>排队 callNumber()
- 去窗口办理–>办理 transact()
- 办理完毕离开–>离开 leave()
然后去银行办理业务有三类人(老人,年轻人,土豪),他们在都会执行上述三个方法,但执行上述三个方法的执行过程是不一样的
我先写一个抽象类Person,在里面定义上述三个方法的规范,再写三个具体类(OldMan,YoungMan,Toff)去继承Person
然后写Bank类,去执行Profession方法(等待用户来办理业务),然后把不同的客户当参数传到这个方法中,这里用到了多态
Person.java
package bank;
public abstract class Person {
protected String name;
public String getName(){
return this.name;
}
public void setName(String name) {
this.name = name;
}
//1.叫一个号码-->排队
public void callNumber(){}
//2.去窗口办理-->办理
public void transact(){}
//3.办理完毕离开-->离开
public void leave(){}
}
OldMan.java
package bank;
public class OldMan extends Person{
public OldMan(){}
public OldMan(String name){
this.name = name;
}
public void callNumber() {
System.out.println("年事已高,不知道在哪儿叫号,请求大堂经理的帮助");
}
public void transact() {
System.out.println("到窗口,掏出手绢儿,拿出存折,取钱");
}
public void leave() {
System.out.println("办理完毕,慢悠悠的离开了");
}
}
YoungMan.java
package bank;
public class YoungMan extends Person {
public YoungMan(){}
public YoungMan(String name){
this.name = name;
}
public void callNumber() {
System.out.println("知道在哪儿叫号,拿到号码小票");
}
public void transact() {
System.out.println("到窗口,汇款");
}
public void leave() {
System.out.println("办理完毕,迅速离开了");
}
}
Toff.java
package bank;
public class Toff extends Person {
public Toff(){}
public Toff(String name){
this.name = name;
}
public void callNumber() {
System.out.println("走VIp通道");
}
public void transact() {
System.out.println("甩出黑卡,拿走100W打算买车");
}
public void leave() {
System.out.println("身后的保镖骚包的提着一袋子钱走了");
}
}
Bank.java
银行Bank类,里面设计一个方法profession(等待用户来办理业务)
package bank;
public class Bank {
//开门,等待用户进来办理业务
public void profession(Person p){ //参数传进来的是Person的子类,实现多态
System.out.println(p.getName()+"客户进入银行");
p.callNumber();
p.transact();
p.leave();
}
}
Demo.java
主函数放这个类里
package bank;
public class Demo {
public static void main(String[] args){
Bank bank = new Bank();
Person young = new YoungMan("小年轻");
bank.profession(young);
System.out.println("=====================================");
Person old = new OldMan("长者");
bank.profession(old);
System.out.println("=====================================");
Person toff = new Toff("霸道总裁");
bank.profession(toff);
}
}
运行结果:
多说一嘴吧,从上面的代码可以看出:
调用一个方法,名字一样,传递参数却不同(这和方法重载很类似)
1.利用方法重载- -静态加载
2.利用多态效果- -动态加载