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));
    	}
    
    }
  • 相关阅读:
    c语言指针讲解第一节初识指针
    linux的的一些入门常识
    sql手注的思路
    mysql主从备份配置
    CentOS 6.5 nginx+tomcat+ssl配置
    mysql 5.7.18安装教程
    minIO分布式集群搭建+nginx负载均衡
    Linux常用命令
    使用python连接mysql数据库——pymysql模块的使用
    with与上下文管理器
  • 原文地址:https://www.cnblogs.com/budoudou/p/2101039.html
Copyright © 2011-2022 走看看