美文网首页
移动架构--6.策略模式、状态模式

移动架构--6.策略模式、状态模式

作者: 小小秤 | 来源:发表于2018-08-07 14:12 被阅读0次

1.策略模式
策略模式,用于算法计算比较多,抽象出一个计算的接口。

//1.接口策略计算类
public interface Calulator{
  int calulator(int price);
}
//2.产品类
public class Proudct{
  private Calulator cal;
  private int originalPrice;
  public Product(int price){
    this.originalPrice = price;
  }
  public void setCal(Calulator cal){
   this.cal = cal;
  }
  public int calulatorPrice(){
    return cal.calulator(originalPrice);
  }
}
//3.具体的策略实现类
public class StragetyA implements Calulator{
  @Override
  public int calulator(int price){
    return (int)(price*0.9);
  }
}
public class StragetyB implements Calulator{
  @Override
  public int calulator(int price){
    return price-20;
  }
}
//4.客户端调用
public class Client{
  public static void main(String[] args){
    Product product = new Product(2000);
    Calulator sa = new StragetyA ();
    Calulator sb = new StragetyB ();
    //用策略A计算价格
    product.setCal(sa);
    product.calulatorPrice();
    //用策略B计算价格
    product.setCal(sb);
    product.calulatorPrice();
  }
}

2.状态模式
电视机的状态开机关机上一频道下一频道

//1.抽象的状态接口
public interface TvState{
  void nextChannel();
  void preChannel();
  void turnOn();
  void turnOff();
}

//2.具体状态类
public class PowerOff implements TVState{
    @Override
    public void nextChannel() {
        System.out.println("关机 无效");
    }
    @Override
    public void preChannel() {
        System.out.println("关机 无效");
    }
    @Override
    public void turnOn() {
        System.out.println("开机");
    }
    @Override
    public void turnOff() {
        System.out.println("关机 无效");
    }
}

public class PowerOn  implements TVState{
    @Override
    public void nextChannel() {
        System.out.println("下一频道");
    }
    @Override
    public void preChannel() {
        System.out.println("上一频道");
    }
    @Override
    public void turnOn() {
        System.out.println("正在开机");
    }
    @Override
    public void turnOff() {
        System.out.println("关机");
    }
}
//3.Tv控制的上下文环境
public class TvContext {
    private TVState tvState=new PowerOff();
    public void setTate(TVState tvState){
        this.tvState=tvState;
    }
    public void turnOn(){
        setTate(new PowerOn());
        tvState.turnOn();
    }
    public void turnOff(){
        setTate(new PowerOff());
        tvState.turnOff();
    }
    public void nextChannel(){
        tvState.nextChannel();
    }
    public void preChannel() {
        tvState.preChannel();
    }   
}

//4.客户端调用
public class Client {
  public static void main(String[] args) {
    TvContext tvContext=new TvContext();
    tvContext.nextChannel();
    tvContext.turnOff();
            
    tvContext.turnOn();
    tvContext.nextChannel();
    tvContext.preChannel();
  }
}

策略模式一个接口方法进行计算,状态模式抽象出几个状态。
具体的状态重接口中进行控制。
状态模式的控制上下文环境中持有具体状态的应用,上下文的环境中包括状态控制方法。
通过Context设置控制状态,进行控制。真正的控制是在状态实现类当中。

相关文章

  • 移动架构--6.策略模式、状态模式

    1.策略模式策略模式,用于算法计算比较多,抽象出一个计算的接口。 2.状态模式电视机的状态开机关机上一频道下一频道...

  • 策略模式和状态模式

    不怕跌倒,所以飞翔 本文中知识点概述: 策略模式和状态模式的基本概念 策略模式和状态模式的区别 策略模式和状态模式...

  • 现实中的模式应用

    桥接模式 针对接口编程,就是桥接模式 策略模式 策略模式也可看作是针对接口编程 状态模式 状态模式通过 Conte...

  • 设计模式-行为模式-策略模式

    策略模式与状态模式看起来差不多,只是从概念上侧重不同。策略模式封装的是策略或算法,状态模式封装的是状态,主要区别在...

  • Android 架构师之路15 设计模式之策略模式

    Android 架构师之路 目录 1、策略模式概念 1.1 介绍 在策略模式(Strategy Pattern)中...

  • 设计模式-状态模式

    介绍 状态模式和策略模式是一对双胞胎,他们都属于行为设计模式。状态模式和策略模式都是为具有多种可能情形设计的模式,...

  • iOS中都有什么设计模式?

    1.代理模式 2.观察者模式 3.MVC模式 4.单例模式 5.策略模式 6.工厂模式 二 各个设计模式的作用? ...

  • okhttp用到的设计模式有哪些

    1. 构造者模式; 2.工厂模式; 3.观察者模式; 4.单例模式; 5.策略模式; 6.责任链模式; 7.享元模式;

  • 策略模式

    策略模式是行为型模式的一种,同时属于行为模式的还有:命令模式,观察者模式,状态模式和之前写的中介者模式。 策略模式...

  • Android中的设计模式整理

    1.单例模式 2.构建者模式 3.工厂模式 4.适配器模式 5.装饰模式 6.外观模式 7.组合模式 8.策略模式...

网友评论

      本文标题:移动架构--6.策略模式、状态模式

      本文链接:https://www.haomeiwen.com/subject/ijnovftx.html