设计模式是什么?在这篇笔记中有介绍【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.利用多态效果- -动态加载

更多推荐

【java--设计模式】策略模式Strategy