zoukankan      html  css  js  c++  java
  • 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));
    	}
    
    }
  • 相关阅读:
    EXP8
    EXP7
    数据库作业
    windows下如何编译运行龙脉代码
    CVE-2019-6340 Drupal8's REST RCE 漏洞复现
    小黄衫获奖感言
    Exp6 MSF应用基础
    Exp5
    实验一 密码引擎-4-国䀄算法交叉测试(选做)
    2020-2021-2 20175335 丹增罗布 《网络对抗技术》Exp1 PC平台逆向破解
  • 原文地址:https://www.cnblogs.com/budoudou/p/2101039.html
Copyright © 2011-2022 走看看