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));
    	}
    
    }
  • 相关阅读:
    SQL 学习笔记(一)联表查询
    .NET (OleDb) Access 各个版本的连接字符口串
    加油站
    程序员的编程套路
    落单的数
    读《怎样解题》
    使用org-mode写cnblogs博客
    Emacs 25.1 error solved: url-http-create-request: Multibyte text in HTTP request
    二进制表示小数
    快速幂
  • 原文地址:https://www.cnblogs.com/budoudou/p/2101039.html
Copyright © 2011-2022 走看看