设计模式之策略模式

同样地,个人理解,如有错误或说的不明白的地方,请一定不吝指出,不胜感激。

首先我们明确一下概念,然后会列一个例子;如果概念不明白的同学可以先看例子,然后回味概念。

1.概念

策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

2.例子

产品经理安排大白设计一个游戏,这个游戏包括如下角色:国王、王后、巨怪以及骑士。每个人都有自己的武器,国王拥有宝剑、王后拥有匕首、骑士拥有弓箭、巨怪拥有斧头。每种武器的使用方式不一样,因此每个人的攻击方式自然就不一样。

大白一想,这还不简单?十分钟就设计了出来:

version1:

大白成功写好代码并上线,运行正常。几天后,产品经理找到大白:“我想给骑士和国王加上骑马的操作。”

这时,大白想了想:“我是应该把rideHorse()方法加到Character中还是给骑士和国王各加一个呢?”如果加到Character类中,那么每个子类都会有一个rideHorse()方法,包括王后和巨怪!如果给骑士和国王各加一个,那么这两个类中的rideHorse()方法将会一样!rideHorse()方法无法复用!

这时,大白想起了一条著名的设计原则:针对接口编程,而不是针对实现编程。

“有了!我创建一个ride的接口,让骑士和国王都实现这个接口就可以了!”大白很激动,立马完成了设计:

version2:

这时,大白的同事指出了问题:如果产品经理又让王后可以骑马怎么办?这样代码不还是不能复用吗?

在同事的帮助下,大白学习了策略设计模式,最终完成了代码设计:

version3:

父类代码:

public abstract class Character {
    Ride ride;
    abstract void attack();
    public void ride(){
        ride.ride();
    }
}

接口:

public interface Ride {
    void ride();
}

接口的实现类:

public class RideHorse implements Ride {
    @Override
    public void ride() {
        System.out.println("骑马");
    }
}
public class RideCow implements Ride {
    @Override
    public void ride() {
        System.out.println("骑牛");
    }
}

国王:

public class King extends Character implements Ride{
    King(Ride ride){
        this.ride = ride;
    }
    @Override
    void attack() {
        System.out.println("用宝剑刺");
    }
}

王后:

public class Queen extends Character{
    @Override
    void attack() {
        System.out.println("用匕首刺");
    }
}

骑士:

public class Knight extends Character implements Ride{
    Knight(Ride ride){
        this.ride = ride;
    }
    @Override
    void attack() {
        System.out.println("射箭");
    }
}

巨怪:

public class Troll extends Character{
    @Override
    void attack() {
        System.out.println("用斧头砍");
    }
}

大功告成!我们来测试一下:

public static void main(String[] args) {
        Character knight = new Knight(new RideHorse());
        knight.ride();
}

我们可以给国王和骑士添加setRide()方法,这样就可以在运行时决定到底是“骑马”还是“骑牛”了。

通过测试代码,我们可以看到策略模式并不是完美的:首先,客户端需要知道所有的策略类,并在调用的时候自行决定使用哪一个策略类,这时候我们可以通过结合工厂模式来解决这个问题。除此之外,策略模式产生了很多的策略类,以及增加了Strategy与Context通信开销。

内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值