• java模式之装饰模式


    1. 什么叫装饰模式?

    根据业务的需求,需要对一个类的方法进行增强的处理。

    2. 为什么需要装饰模式?

    拓展性更加的好,当觉得这个装饰不好的时候,可以直接拿下,不需要改变任何的代码。

    3. 装饰模式的一个具体的应用?   电子发票系统

    代码:

    package com.huxin.decorator.test;
    import java.util.Date;
    import java.util.Vector;
    
    abstract public class Order {
        private String name;
        private Date date ;
        private Vector itemsLinelist  = new Vector(10);
        public Order(){
        	System.out.println("调用order的构造方法");
        }
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public Date getDate() {
    		return date;
    	}
    	public void setDate(Date date) {
    		this.date = date;
    	}
    	public double getTotalPrice() {
    		double price = 0.0d;
    		for(int i =0 ;i<itemsLinelist.size();i++){
    			ItemsLine itemsLine = (ItemsLine)itemsLinelist.get(i);
    			price +=itemsLine.getSubTotalPrice();
    		}
    		return price;
    	}
    	public void addItems(ItemsLine itemsLine){
    		itemsLinelist.add(itemsLine);
        }
         
    	public void removeItems(ItemsLine itemsLine){
    		itemsLinelist.remove(itemsLine);
    	}
    	public void print(){
    System.out.println("order==================================================");
    		for(int i =0 ;i<itemsLinelist.size();i++){
    			ItemsLine itemsLine = (ItemsLine)itemsLinelist.get(i);
    			itemsLine.print();
    		}
    	}
    }
    


     

    package com.huxin.decorator.test;
    
    public class SalsOrder extends Order {
       public SalsOrder(){
    	  System.out.println("调用SalsOrder的构造方法");
       }
       public void print(){
    	   super.print();
       }
    }
    


     

    package com.huxin.decorator.test;
    
    public class ItemsLine {
        private String itemsName;
        private double unit ;
        private int number;
        private double subTotalPrice;
    	public String getItemsName() {
    		return itemsName;
    	}
    	public void setItemsName(String itemsName) {
    		this.itemsName = itemsName;
    	}
    	
    	public double getUnit() {
    		return unit;
    	}
    	public void setUnit(double unit) {
    		this.unit = unit;
    	}
    	public int getNumber() {
    		return number;
    	}
    	public void setNumber(int number) {
    		this.number = number;
    	}
    	public double getSubTotalPrice() {
    		return number * unit;
    	}
    	public void print(){
    		System.out.println("购买商品的名字为:"+ itemsName+ "单价为:"+ unit+ "数量为"+ number);
    	}
    }


     

    package com.huxin.decorator.test;
    
    abstract public class AbstractDecorator extends Order{
       protected Order order; 
       //装饰类必须接受这个order对象
       public AbstractDecorator(Order order){
    	   this.order = order;
    	   this.setDate(order.getDate());
    	   this.setName(order.getName());
       }
       public void print(){
    	   super.print();
       }
    }
    


     

    package com.huxin.decorator.test;
    
    public class FootDecorator extends AbstractDecorator {
    	   //装饰类必须接受这个order对象
    	   public FootDecorator(Order order){
              super(order);
    System.out.println("我后被创建FootDecorator");
    	   }
    	   public void print(){
    		   order.print();
    		   printFooter();
    	   }
    	   public void printFooter(){
    System.out.println("foot==================================================");
    		   System.out.println("总价格为:"+ super.order.getTotalPrice());
    	   }
    }


     

    package com.huxin.decorator.test;
    
    public class HeaderDecorator extends AbstractDecorator {
    	   //装饰类必须接受这个order对象
    	   public HeaderDecorator(Order order){
    		  super(order);
    System.out.println("我先被创建HeaderDecorator");
    	   }
    	   public void print(){
    		   printHeader();
    		   super.order.print();
    	   }
    	   public void printHeader(){
    System.out.println("header==================================================");
    		   System.out.println("顾客的姓名为:"+ super.order.getName() +"日期为:"+ super.order.getDate());
    	   }
    }


     

    package com.huxin.decorator.test;
    
    import java.util.Date;
    
    public class Client {
    	private static Order order;
    	public static void main(String[] args) {
    		
    		
    	   order = new SalsOrder();
    
    	   ItemsLine itemsLine = new ItemsLine();
    	   itemsLine.setItemsName("杯子");
    	   itemsLine.setUnit(8.0d);
    	   itemsLine.setNumber(1);
    	   
    
    	   ItemsLine itemsLine2 = new ItemsLine();
    	   itemsLine2.setItemsName("疯狂java");
    	   itemsLine2.setUnit(610d);
    	   itemsLine2.setNumber(2);
    	   
    	   order.addItems(itemsLine2);
    	   order.addItems(itemsLine);
    	   
    	   order.setDate(new Date());
    	   order.setName("胡鑫");
    	   order= new HeaderDecorator(new FootDecorator(order));
    	   order.print();
    	}
    }


     

  • 相关阅读:
    show variables like "sql_mode"; set sql_mode=''; set sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';
    c#单元测试
    React HookApi
    React Navigation验证流程
    React Native 错误笔记
    React Navigation 5.x BottomTab 使用
    React Navigation 5.x 使用
    虹软人脸识别SDK接入Milvus实现海量人脸快速检索
    iOS逆向:越狱手机抹除数据、还原,cydia出错(2021.04.21 完结)
    C#教程1:类型和变量
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3165477.html
Copyright © 2020-2023  润新知