zoukankan      html  css  js  c++  java
  • 设计模式之 策略模式

    策略模式为同一个行为定义了不同的策略,并为每种策略都实现了不同的方法。在用户使用时,系统根据不同的策略自动切换不同的方法来实现策略的改变。同一个策略下的不同方法是对同一功能的不同实现,因此在使用时可以相互替换而不影响用户的使用。

    image

    (1)定义策略模式接口

    public interface TravelStrategy{
        void travelMode();
    }

    (2)定义策略实现

    public class TravelByAirStrategy implements TravelStrategy{
        private final static Log logger = LogFactory.getLog(this.getClass());
    
        @Override
        public void travelMode(){
            logger.info("travel by air");
        }
    }
    
    public class TravelByCarStrategy implements TravelStrategy{
        private final static Log logger = LogFactory.getLog(this.getClass());
    
        @Override
        public void travelMode(){
            logger.info("travel by car");
        }
    }

    (3)定义上下文实现策略模式

    public class Context{
        private TravelStrategy travelStrategy;
        public TravelStrategy getTravelStrategy(){
            return travelStrategy;
        }
    
        public void setTravelStrategy(TravelStrategy travelStrategy){
            this.travelStrategy = travelStrategy;
        }
    
        public void travelMode(){
            this.travelStrategy.travelMode();
        }
    }

    (4)使用策略模式

    public static void main(String[] args){
        Context context = new Context();
        // travel by air
        TravelStrategy travelByAir = new TravelByAirStrategy();
        context.setTravelStrategy(travelByAir);
        context.travelMode();
    
        // travel by car
        TravelStrategy travelByCar = new TravelByCarStrategy();
        context.setTravelStrategy(travelByCar);
        context.travelMode();
    }

  • 相关阅读:
    winform控件库二次开发yy
    Oracle数据库表死锁和解锁
    集合去重筛选
    linux手动生成core dump
    HandlerSocket简介以及php使用handlersocket
    使用truss、strace或ltrace诊断软件的“疑难杂症”
    Sqlserver 2012 导出表数据为SQL脚本
    MySQL的索引为什么使用B+Tree
    计算机体系
    docker使用
  • 原文地址:https://www.cnblogs.com/betterwgo/p/15233087.html
Copyright © 2011-2022 走看看