当前位置: 首页 >  网技达人 >  01介绍(策略模式)

01介绍(策略模式)

导读:软件开发:.唯一不变的是变化:.不管设计的多好,随着时间推移,应用必定成长和变更.设计原则:.封装变化:设别应用中变化的方面,把它们和不变的方面分开;.(把会变化的部分取出并封装,这样,就可以修改或者扩展这个部分,而不会影响其他不需要变化的部分).针对接口编程,而不是针对实现编程

软件开发:

唯一不变的是变化:
不管设计的多好,随着时间推移,应用必定成长和变更

设计原则:

  1. 封装变化:设别应用中变化的方面,把它们和不变的方面分开;
    (把会变化的部分取出并封装,这样,就可以修改或者扩展这个部分,而不会影响其他不需要变化的部分)
  2. 针对接口编程,而不是针对实现编程(接口,实际上就是针对超类型编程(抽象类型有抽象类和接口))
  3. 优先使用组合而不是继承

01 最初

类–>继承

(缺点:代码重复;代码的局部更新导致非局部的副作用)

不一致的方法使用接口

(因为接口没有实现代码,所以摧毁了这些方法的代码复用;
如果需要修改一个行为,那么需要追踪到所有定义了该行为的子类并修改它)

02 改进

want:需要变更时,使用对现有代码影响最小的方式;花更少的时间重写代码

  • 分离变和不变(根据设计原则①)
    把子类不一致的方法从父类抽取出来,并创建一组新的类来表示每个方法

  • 接口编程(根据设计原则②)
    使用接口表示每个方法,方法的每个实现将实现其中一个接口;
    (方法类继承接口;而不是子类或者父类实现接口)
    !!复用+脱离继承所带来的包袱

【这个设计:其他对象就可以复用接口的实现方法,而且这些方法不在父类中;如果增加新的接口实现,不会修改已有的实现类,也不会影响使用方法的子类】

子类将使用接口所表示的方法

03整合

整合:父类委托接口,而不是使用

  • 添加实例变量(类型为接口类型)
    (在运行时,具体对象会给变量分配特定行为)
  • 修改不一致的方法:
    fly()–>performFly()
Public abstract class Duck{
  FlyBehavior flyBehavior;
 【创建子类,在构造方法中flyBehavior = new FlyWithWings();】

  Public void performFly(){
    flyBehavior.fly();【创建对象后,会根据接口的实现自动分配特定行为】
  }
}

针对实现编程了(在构造器库实现接口);
(虽然有很多弹性,但是在初始化实例变量上做的糟糕)

04 优化

want:如何实现一个对象,其方法可以在运行时改变

动态设置行为;

不是在构造器中实例化;

public void setFlyBehavior(FlyBehavior fb){
    flyBehavior = fb;
}

Duck model = new ModelDuck();
Model.setFlyBehavior(new FlyWithRocket());

修改行为,就可以直接调用setter方法改;


总结

以上就是策略模式的情况:
策略模式:

定义一个算法族(行为类),分别封装起来,使得它们之间可以互相变换;策略让算法的变化独立于使用它的客户

OO工具箱
OO基础:抽象、封装、多态、继承
OO原则:

封装变化
优先使用组合而不是继承
针对接口编程,而不是针对实现编程。

OO模式:策略模式

要点

1.知道OO基础,还不能你成为好的OO设计人员。
2.良好的OO设计是可复用、可扩展和可维护的
3.模式向你展示如何建造具有良好OO设计质量的系统。
4.模式是历经验证的OO经验。
5.模式不给你代码,而是针对设计问题给出通用的解决方案。你把它们用到特定的应用中
6.模式不是被发明,而是被发现。
7.大多数的模式和原则,都着眼于软件中的变化这个主题。
8.大多数模式允许系统的某些部分独立于其他部分而变化。
9.我们经常尝试把系统中会变化的部分抽出来封装
10.模式提供了一种共享的语言,能最大化你和其他开发人员沟通的价值

内容
  • 代码审计工具Fortify基本使用
    代码审计工具Fortify基本使
    2023-12-11
    最近接触到一款代码审计的工具 — Fortify SCA and Applications 22.2.0,现就其基本使用
  • 4.7 x64dbg 应用层的钩子扫描
    4.7 x64dbg 应用层的钩
    2023-12-06
    所谓的应用层钩子(Application-level.hooks)是一种编程技术,它允许应用程序通过在特定事件发生时执行
  • 智能物联网时代里信息存储、处理和传输方式的变化浅谈
    智能物联网时代里信息存储、处理和
    2023-12-06
    智能物联网时代里信息存储、处理和传输方式的变化浅谈.在智能物联网时代,信息存储、处理和传输的方式将发生重大变化。以下是一
  • DevSecOps之应用安全测试工具及选型
    DevSecOps之应用安全测试
    2023-12-05
    上篇文章,有同学私信想了解有哪些DevSecOps工具,这里整理出来,供大家参考(PS: 非专业安全人士,仅从DevOp
  • FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心
    FlashDuty Change
    2023-12-04
    FlashDuty:一站式告警响应平台,前往此地址免费体验!.自定义字段.FlashDuty 已支持接入大部分常见的告警
  • Docker教程1-引言 2-简介 3-安装
    Docker教程1-引言 2-简
    2023-12-03
    1 引言.本章内容:为什么要使用容器、容器有什么作用、在哪里可以使用容器。.1.1 糟糕的过去.应用程序是企业的核心。大
  • 线段简化的几种算法
    线段简化的几种算法
    2023-12-01
    翻译自:https://www.codeproject.com/Articles/114797/Polyline-.Si
  • 智能车载设备
    智能车载设备
    2023-10-02
    智能车载设备.我们的智能车载设备是一款结合了最新科技和创新设计的汽车配件,旨在提升驾驶体验、提高安全性和为用户带来智能化
  • 智能医疗设备
    智能医疗设备
    2023-10-02
    智能医疗设备产品介绍.智能医疗设备是一款集成了先进技术的高科技产品,旨在提高医疗保健的效率和质量。该设备主要应用于医院、
  • 互联网金融服务平台
    互联网金融服务平台
    2023-10-01
    互联网金融服务平台.产品功能.个人理财:用户可以通过平台进行投资理财,选择适合自己的理财产品,实现资金增值。.贷款服务:
  • 电子元件电感
    电子元件电感
    2023-10-02
    电子元件电感.产品功能.电感是一种重要的电子元件,用于储存和释放电能,调节电路中的电流和电压。它在电子设备和通讯设备中起
  • 智能智能家居设备
    智能智能家居设备
    2023-10-05
    智能家居设备介绍.产品概述.我们当前运营的产品是智能家居设备,它是一款智能化的家居控制系*,旨在为用户提供更便捷、舒适的
  • 智能可穿戴设备
    智能可穿戴设备
    2023-10-03
    产品功能介绍.我们的智能可穿戴设备是一款集健康监测、运动追踪、通讯互动等多种功能于一体的产品。它采用先进的传感技术,可实
  • 智能手机
    智能手机
    2023-10-01
    产品功能介绍:智能手机.智能手机是一款集通讯、娱乐、办公等功能于一体的移动智能设备。首先,智能手机具有强大的通讯功能,支
  • 智能智能物流设备
    智能智能物流设备
    2023-10-04
    智能物流设备.1. 产品描述.智能物流设备是一款基于物联网技术的智能设备,主要用于运输、储存和**物流货物。其核心功能是
  • 智能智能娱乐设备
    智能智能娱乐设备
    2023-10-04
    产品功能介绍.1. 智能娱乐设备.我们的智能娱乐设备是一款结合了智能技术和娱乐功能的产品。它拥有丰富的娱乐资源,包括音乐
  • 智能电视
    智能电视
    2023-10-01
    产品功能介绍.智能电视是一款结合了传统电视和智能硬件的产品。它内置了智能操作系*,能够连接互联网并运行各种应用程序。智能