设计模式-策略模式

策略模式

简介

封装好一个可以重复利用的算法族,以做到哪里需要哪里用。

避免有多个相同或相似的算法需要使用大量的 if else

实际应用

  1. JAVA AWT 中的 LayoutManager,可以使用多种布局方式,即为不同的策略
  2. 坦克大战中如果需要发射不同的炮弹,可以指定不同的策略进行替换

类图

在这里插入图片描述

代码

  1. 设计一个鸭子类,有许多种不同的鸭子实现,它们具有相同的行为

    public class Duck{
        void quack(){
            System.out.println("gagaga");
        };
    }
    
    // 子类A
    class DuckA extends Duck{
    }
    
    // 子类B
    class DuckA extends Duck{
    }
    
  2. 问题:如果两个子类的可能并不是gagaga的叫?

    • 解决:为每一个子类进行方法的重写

      // 子类A
      class DuckA extends Duck{
      }
      
      // 子类B
      class DuckA extends Duck{
          void quack(){
              System.out.println("jijiji");
          }
      }
      
  3. 如果有许多鸭子子类,例如 DuckC,DuckD,DuckE … ,等进行 jijiji 或者其他的叫声该怎么办

    • 解决:定义接口用于实现鸭子的 quack 方法,同时定义一系列定义好的策略,用于实时执行鸭子的行为

      interface Quackable{
      	void quack();
      }
      
      public class Duck{
      	Quackable quackAble;
          void quack(){
              quackAble.quack();
          };
      }
      
      // 子类A
      class DuckA extends Duck{
      }
      
      // 子类B
      class DuckA extends Duck{
      }
      
      // 策略1
      class GUGUQuack implements Quackable{
      	void quack(){
          	System.out.println("gugugu");
      	}
      }
      // 策略2
      class JiJiQuack implements Quackable{
      	void quack(){
          	System.out.println("jiji");
      	}
      }
      // 策略3
      class DUDUQuack implements Quackable{
      	void quack(){
          	System.out.println("dudu");
      	}
      }
      
      

    此时便可以根据不同的需要采用不同的策略,极大的增大了代码的利用率。

引用

  1. Head First 设计模式
  2. 菜鸟教程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值