广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java设计模式之初识行为型模式
  • 257
分享到

Java设计模式之初识行为型模式

2024-04-02 19:04:59 257人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、行为型模式二、模板方法模式2.1 例子2.2 模板方法使用场景三、策略模式3.1 例子3.2 使用场景四、状态模式五、中介者模式六、观察者模式6.1 使用场景一、行为型模式

一、行为型模式

  • 行为型模式关注点在于"如何运行对象/类";
  • 行为型模式用来描述程序在运行时复杂的流程控制;
  • 描述多个类或对象之间怎样互相协作共同完成单个对象都无法单独完成的任务,设计算法与对象间职责的分配;
  • 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。

二、模板方法模式

在模板模式中,一个抽象类公开定义了执行它的方法的方式模板。它的子类可以按需重写方法实现,但调用将以抽象类中定义的方式进行;

2.1 例子

以做饭举例

模板类


package com.vleus.design.behavioral.template;


public abstract class CookieTemplate {

    
    public void cook() {
        //定义算法步骤
        heating();
        addFood();
        addSalt();
        stirfry();
        end();
    }

    //加热方法
    public void heating() {
        System.out.println("准备开火。。。");
    }

    //添加食物
    public abstract void addFood();


    //加盐
    public abstract void addSalt();

    //翻炒
    public void stirfry() {
        System.out.println("翻炒中。。。");
    }

    //出锅
    public void end() {
        System.out.println("出锅。。。。");
    }

}

子类实现模板类


package com.vleus.design.behavioral.template;


public class AutoCookMachine extends CookieTemplate{

    @Override
    public void addFood() {
        System.out.println("放了三根娃娃菜。。。");
    }

    @Override
    public void addSalt() {
        System.out.println("放了一勺盐。。。");
    }
}

测试


package com.vleus.design.behavioral.template;


public class MainTest {

    public static void main(String[] args) {

        AutoCookMachine autoCookMachine = new AutoCookMachine();

        autoCookMachine.cook();

    }
}

运行结果

在这里插入图片描述 

2.2 模板方法使用场景

  • spring的整个继承体系都基本用到模板方法:
  • BeanFactory:getBean-A-B-C-D;
  • JdbcTemplate、RedisTemplate都允许再扩展

三、策略模式

概念:策略(Strategy)模式定义了一系列算法,并将每个算法封装起来,使得它们可以相互替换,且算法的变化不会影响使用算法的客户。属于对象行为模式

  • 抽象策略类(Strategy);
  • 具体策略(Concrete Strategy);
  • 环境类:持有一个策略类的引用,最终给客户端调用;

3.1 例子

以RNG的打游戏的策略为例
环境类,持有策略引用


package com.vleus.design.behavioral.strategy;


public class TeamRNG {

    //抽取游戏策略算法,并进行引用
    private GameStrategy gameStrategy;

    public void setGameStrategy(GameStrategy gameStrategy) {
        this.gameStrategy = gameStrategy;
    }

    public void startGame() {

        System.out.println("全军出击。。。");

        //使用游戏套路
        gameStrategy.warStrategy();

        System.out.println("Victory。。。。。");
    }
}

抽象策略类,定义相关策略方法


package com.vleus.design.behavioral.strategy;

public interface GameStrategy {

    //游戏策略方法
    void warStrategy();
}

抽象策略类的实现1


package com.vleus.design.behavioral.strategy;


public class UziStrategy implements GameStrategy{
    @Override
    public void warStrategy() {
        System.out.println("uzi莽夫式打法获取胜利。。。。");
    }
}

抽象策略类的实现2


package com.vleus.design.behavioral.strategy;


public class SteadyGameStrategy implements GameStrategy{

    @Override
    public void warStrategy() {
        System.out.println("稳健运营,蚕食对手获取胜利。。。");
    }
}

测试类


package com.vleus.design.behavioral.strategy;


public class MainTest {

    public static void main(String[] args) {
        TeamRNG teamRNG = new TeamRNG();

        teamRNG.setGameStrategy(new UziStrategy());

        teamRNG.startGame();

        System.out.println("----------------------");

        teamRNG.setGameStrategy(new SteadyGameStrategy());
        teamRNG.startGame();
    }
}

3.2 使用场景

  • Spring的InstantiationStrategy;
  • 线程池拒绝策略;

四、状态模式

概念:状态模式,对有状态的对象,把负责的"判断逻辑"提取到不同的状态对象中,允许状态对象在其内部状态发生改变的时候改变其行为;

  • 环境类角色;
  • 抽象状态角色;
  • 具体状态角色

抽象状态类


package com.vleus.design.behavioral.state;

public interface TeamState {

    //玩游戏的状态
    void playGame();

    //切换到下一个状态
    TeamState next();
}

状态实现类1


package com.vleus.design.behavioral.state;


public class VocationState implements TeamState{

    @Override
    public void playGame() {
        System.out.println("在三亚度假,真舒服,不想打游戏。。。");
    }

    //切换到下一个状态
    @Override
    public TeamState next() {
        return new EatBeefNoodlesState();
    }
}

状态实现类2


package com.vleus.design.behavioral.state;


public class EatBeefNoodlesState implements TeamState{

    @Override
    public void playGame() {
        System.out.println("恰牛肉面恰饱饱。。。。");
    }

    @Override
    public TeamState next() {
        return new MatchState();
    }
}

状态实现类3


package com.vleus.design.behavioral.state;


public class MatchState implements TeamState{

    @Override
    public void playGame() {
        System.out.println("全力以赴打比赛...");
    }

    @Override
    public TeamState next() {
        return new VocationState();
    }
}

环境类调用


package com.vleus.design.behavioral.state;


public class SktTeam {

    private TeamState teamState;

    public void setTeamState(TeamState teamState) {
        this.teamState = teamState;
    }

    void startGame() {
        //状态不同可能会导致不同的游戏结果
        teamState.playGame();
    }

    //下一个状态
    void nextState() {
        teamState = teamState.next();
    }
}

测试类


package com.vleus.design.behavioral.state;


public class MainTest {

    public static void main(String[] args) {

        SktTeam sktTeam = new SktTeam();
        VocationState state = new VocationState();
        sktTeam.setTeamState(state);

        sktTeam.startGame();
        sktTeam.nextState();
        sktTeam.startGame();
        sktTeam.nextState();
        sktTeam.startGame();
    }
}

五、中介者模式

网状变星状

在这里插入图片描述

概念:用一个中介对象来封装一系列的对象交互,中介者使得各个对象之间不需要显式地互相调用,减少对象间混乱的依赖关系,从而使其耦合松散,而且可以独立地改变他们之间的交互。属于对象行为模式。

六、观察者模式

概念:定义对象间的一种一对多依赖关系,使得当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又被成为发布-订阅模式。
核心:被观察对象维护观察对象的引用集合,发生变化的时候通知每一个观察对象即可,就拿tiktok的关注主播为例

抽象主播类:


package com.vleus.design.behavioral.observer;


public abstract class AbstractTikToker {

    //添加粉丝
    abstract void addFans(AbstractFans abstractFans);

    //通知粉丝
    abstract void notifyFans(String msg);
}

美女主播实现类


package com.vleus.design.behavioral.observer;

import com.vleus.design.structural.flyweight.AbstractWaitressFlyweight;

import java.util.ArrayList;
import java.util.List;


public class MMTikToker extends AbstractTikToker {

    List<AbstractFans> fansList = new ArrayList<>();

    void startSell() {
        System.out.println("主播开始卖货了。。。");
        notifyFans("我开始卖货了,卖茅台。。。");
    }

    void enbSell() {

        System.out.println("主播货卖完了。。。");
        notifyFans("茅台已经卖完了");
    }

    @Override
    void addFans(AbstractFans abstractFans) {
        fansList.add(abstractFans);
    }

    
    @Override
    void notifyFans(String msg) {
        //遍历粉丝
        for (AbstractFans abstractFans : fansList) {
            abstractFans.acceptMsg(msg);
        }
    }
}

抽象粉丝类


package com.vleus.design.behavioral.observer;


public abstract class AbstractFans {

    abstract void acceptMsg(String msg);

    void follow(AbstractTikToker tikToker) {
        //主播增加粉丝
        tikToker.addFans(this);
    }
}

粉丝实现类


package com.vleus.design.behavioral.observer;


public class HumanFans extends AbstractFans{

    @Override
    void acceptMsg(String msg) {
        System.out.println("粉丝说主播说:" +msg);
    }
}

测试类


package com.vleus.design.behavioral.observer;


public class MainTest {

    public static void main(String[] args) {

        MMTikToker mmTikToker = new MMTikToker();

        mmTikToker.startSell();

        HumanFans humanFans1 = new HumanFans();
        HumanFans humanFans2 = new HumanFans();
        HumanFans humanFans3 = new HumanFans();

        humanFans1.follow(mmTikToker);
        humanFans2.follow(mmTikToker);
        humanFans3.follow(mmTikToker);

        System.out.println("---------------------------");

        mmTikToker.enbSell();
    }
}

6.1 使用场景

  • Spring事件通知机制;
  • 响应式编程
  • Vue的双向绑定核心

到此这篇关于Java设计模式之初识行为型模式的文章就介绍到这了,更多相关Java行为型模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java设计模式之初识行为型模式

本文链接: https://www.lsjlt.com/news/127761.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java设计模式之初识行为型模式
    目录一、行为型模式二、模板方法模式2.1 例子2.2 模板方法使用场景三、策略模式3.1 例子3.2 使用场景四、状态模式五、中介者模式六、观察者模式6.1 使用场景一、行为型模式 ...
    99+
    2022-11-12
  • Java设计模式初识之备忘录模式详解
    目录简介典型实现总结优点缺点适用场景源码简介 备忘录设计模式(Memento Design Pattern)也叫作快照(Snapshot)模式,主要用于实现防丢失、撤销、恢复等功能。...
    99+
    2022-11-13
    Java 设计模式 备忘录模式 Java 备忘录模式 Java 设计模式
  • Java设计模式之行为型模式的示例分析
    这篇文章主要介绍Java设计模式之行为型模式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、行为型模式行为型模式关注点在于"如何运行对象/类";行为型模式用来描述程序在运行时复杂的流程...
    99+
    2023-06-15
  • .Net行为型设计模式之命令模式(Command)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、命令模式的代码实现六、命令模式的实现要点:1、命令模式的优点:2、命令模式的...
    99+
    2022-11-13
  • .Net行为型设计模式之状态模式(State)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、状态模式的代码实现六、状态模式的实现要点:1、状态模式的优点2、状态模式的缺...
    99+
    2022-11-13
  • .Net行为型设计模式之策略模式(Stragety)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、策略模式的代码实现六、策略模式的实现要点:1、策略模式的主要优点有:2、策略...
    99+
    2022-11-13
  • Java行为型设计模式之策略模式怎么实现
    本文小编为大家详细介绍“Java行为型设计模式之策略模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java行为型设计模式之策略模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.策略设计模...
    99+
    2023-07-04
  • 深入了解Java行为型设计模式之策略模式
    目录策略模式应用场景优缺点主要角色策略模式的基本使用创建抽象策略角色创建具体策略角色创建上下文角色客户端执行策略模式实现支付方式的选择创建抽象策略角色创建具体策略角色创建上下文角色客...
    99+
    2022-11-13
  • Java行为型设计模式之模板方法详解
    目录模板方法模式应用场景主要角色优缺点模板方法模式的基本使用创建抽象模板角色创建具体实现客户端调用模板方法模式 模板方法模式属于行为型设计模式。它是指定义一个操作中的算法的框架,而将...
    99+
    2022-11-13
  • 浅谈Java设计模式之原型模式知识总结
    如何使用? 1.首先定义一个User类,它必须实现了Cloneable接口,重写了clone()方法。 public class User implements Cloneabl...
    99+
    2022-11-12
  • .Net行为型设计模式之迭代器模式(Iterator)
    目录一、动机(Motivate)二、意图(Intent)三、结构图四、模式的组成五、迭代器模式的代码实现六、迭代器模式的实现要点:迭代器模式的优点:迭代器模式的缺点:迭代器模式的使用...
    99+
    2022-11-13
  • .Net行为型设计模式之观察者模式(Observer)
    目录一、动机(Motivate)二、意图(Intent)三、结构图四、模式的组成五、观察者模式的代码实现六、观察者模式的实现要点:1、观察者模式的优点:2、观察者模式的缺点:七、.N...
    99+
    2022-11-13
  • .Net行为型设计模式之中介者模式(Mediator)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、中介者模式的代码实现六、中介者模式的实现要点:1、中介者模式的优点2、中介者...
    99+
    2022-11-13
  • .Net行为型设计模式之职责链模式(ChainofResponsibility)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、职责链模式的代码实现六、职责链模式的实现要点:1、职责链模式的主要优点有:2...
    99+
    2022-11-13
  • .Net行为型设计模式之访问者模式(Visitor)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、访问者模式的代码实现六、访问者模式的实现要点:(1)、访问者模式的主要优点有...
    99+
    2022-11-13
  • .Net行为型设计模式之解释器模式(Interpreter)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、解释器模式的代码实现六、解释器模式的实现要点:1、解释器模式的主要优点有:2...
    99+
    2022-11-13
  • .Net行为型设计模式之备忘录模式(Memento)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、备忘录模式的代码实现六、备忘录模式的实现要点:1、备忘录模式的主要优点有:2...
    99+
    2022-11-13
  • .Net行为型设计模式之模板方法模式(Template Method)
    目录一、动机(Motivate)二、意图(Intent)三、结构图四、模式的组成五、模板方法模式的具体实现六、模板方法模式的实现要点:1、模板方法模式适用情形:2、模板方法模式特点:...
    99+
    2022-11-13
  • Java设计模式之java原型模式详解
    目录介绍角色Java语言提供的clone()方法代码演示—克隆羊结论深浅拷贝深浅拷贝探讨实现深克隆的方式一 : 手动对引用对象进行克隆实现深克隆的方式一 :序列化原型模式对单例模式的...
    99+
    2022-11-12
  • Java设计模式之原型模式详解
    目录一、前言二、优点及适用场景三、原型模式的注意事项四、浅复制和深复制五、浅复制demo演示六、深复制demo演示一、前言 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作