• Stategy模式


    日常生活中我们会碰到很多选择,在代码中就表现为成堆的if/else,如果我们直接在if/else中改动逻辑,很有可能将好的

    逻辑就改坏了,在我们的项目中深受其害。其实我们可以将通过stategy模式解决这个问题。

    比如说我们去买碟,有三种碟片可以选择:美国最新大片,经典电影,儿童电影。不同的电影收费不一样,

    大片每张5元小于等于5张时按原价收费,大于5张打8折;经典电影每张4元,不打折;儿童电影一次5元,不限数量。

    当然你可以加一些if/else来完成这个功能需求,但是个人觉得stategy模式可以很优雅的解决这个问题。

    public abstract class DiskType {
        public abstract int getPrice(int num);
    }
    

    public class Movie {
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public DiskType getType() {
    		return type;
    	}
    
    	public void setType(DiskType type) {
    		this.type = type;
    	}
    
    	private String name;
    	private DiskType type;
    
    	public Movie(String name, DiskType type) {
    		super();
    		this.name = name;
    		this.type = type;
    	}
    }
    
    public class ChildrenMovie extends DiskType {
    
    	@Override
    	public int getPrice(int num) {
    		return 5;
    	}
    
    }
    
    public class ClassicMovie extends DiskType {
    
    	@Override
    	public int getPrice(int num) {
    		int price = 0;
    		price=4*num;
    		return price;
    	}
    
    }
    
    public class LastestMovie extends DiskType {
    
    	@Override
    	public int getPrice(int num) {
    		int price = 0;
            if(num <=5)
            	price=num*5;
            else
            	price=(int) (num*5*0.8);
    		return price;
    	}
    
    }
    
    	public static void main(String[] args) {
    		DiskType dt= new LastestMovie();
    		Movie m= new Movie("Pirates of the Caribbean 4 ",dt);
    		System.out.println(m.getName()+m.getType().getPrice(8));
    		
    		
    		dt= new ClassicMovie();
    		m= new Movie("brave heart ",dt);
    		System.out.println(m.getName()+m.getType().getPrice(4));
    		
    		
    		
    		dt= new ChildrenMovie();
    		m= new Movie("King lion ",dt);
    		System.out.println(m.getName()+m.getType().getPrice(4));
    	}
    
    }
  • 相关阅读:
    5.6移植Madplay到开发板
    5.4.Makefile
    5.3交叉工具链使用
    5.2嵌入式linux程序编译与调试
    5.1Minicom 通信配置-linux环境
    7.点亮led的操作
    6、异常向量表的学习---设置SVC模式
    4.协处理器访问指令
    3.Arm机器码
    android RelativeLayout控件或view实现叠加效果
  • 原文地址:https://www.cnblogs.com/budoudou/p/2101039.html
Copyright © 2020-2023  润新知