`
conkeyn
  • 浏览: 1525162 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

设计模式笔试题

 
阅读更多

1、题目1

 

一家音像制品店销售了各式各样的音像制品,包含如CD唱片、VCD影片、DVD影片和蓝光影片等。
由于目前处理销售淡季,音像制品店老板希望做一些促销活动,针对一些特定的产品推出一些优惠活动,活动内容如下:
1)任意客户一次性购买VCD碟片满200元,送一张蓝光影片一张;
2)任意客户一次性购买DVD D9碟片满8张,就打9折;

要求:
1)针对上述需求写一个简单的分析(字数不限)
2)设计相应的数据结构
3)请用自己最熟悉的语言写一个收银机程序,该程序能够自动计算出总价,并打印明细。

 

package test.shoppingcart.model;

import java.io.Serializable;

/**
 * 商品
 * 
 * @author Administrator
 * 
 */
public abstract class Commodity implements Serializable {

	private static final long serialVersionUID = 7111046014915319904L;
	protected String name;
	protected double price;
	protected String sn;
	protected String validate;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public String getSn() {
		return sn;
	}

	public void setSn(String sn) {
		this.sn = sn;
	}

	public String getValidate() {
		return validate;
	}

	public void setValidate(String validate) {
		this.validate = validate;
	}

	@Override
	public String toString() {
		return "Commodity [name=" + name + ", price=" + price + ", sn=" + sn + ", validate=" + validate + "]";
	}
}

 

package test.shoppingcart.model;

public class DVD extends Commodity {

	private static final long serialVersionUID = -5938569445753451675L;

}

 

package test.shoppingcart.model;

public class DVD9 extends DVD {

	private static final long serialVersionUID = 2680014167158542125L;
	public DVD9() {
		super.name = "DVD9";
		super.price = 60.0d;
		super.sn = "123456";
		super.validate = "20991231";
	}
	
}

 

package test.shoppingcart.model;

public class DVDBlue extends Commodity {

	private static final long serialVersionUID = 3559142666893595895L;

	public DVDBlue() {
		super.name = "DVDBlue";
		super.price = 50.0d;
		super.sn = "4215";
		super.validate = "20991231";
	}
}

 

package test.shoppingcart.model;

/**
 * 购物条目录
 * 
 * @author Administrator
 * 
 */
public class Entry {

	Commodity commodity;

	/** 数量 */
	int copies = 0;

	/** 原价 */
	double originalPirce;

	/** 折扣价 */
	double currentPrice;

	public Entry(Commodity commodity, int copies, double originalPirce, double currentPrice) {
		this.commodity = commodity;
		this.copies = copies;
		if (originalPirce == 0) {
			this.originalPirce = commodity.getPrice() * copies;
		}
		this.currentPrice = currentPrice;
	}

	public Commodity getCommodity() {
		return commodity;
	}

	public void setCommodity(Commodity commodity) {
		this.commodity = commodity;
	}

	public int getCopies() {
		return copies;
	}

	public void setCopies(int copies) {
		this.copies = copies;
	}

	public double getOriginalPirce() {
		return originalPirce;
	}

	public void setOriginalPirce(double originalPirce) {
		this.originalPirce = originalPirce;
	}

	public double getCurrentPrice() {
		return currentPrice;
	}

	public void setCurrentPrice(double currentPrice) {
		this.currentPrice = currentPrice;
	}

	@Override
	public String toString() {
		return "Entry [commodity=" + commodity + ", copies=" + copies + ", originalPirce=" + originalPirce + ", currentPrice=" + currentPrice + "]";
	}

}

 

package test.shoppingcart.model;

public class VCD extends Commodity {

	private static final long serialVersionUID = 5127362020171422936L;

	public VCD() {
		super.name = "VCD";
		super.price = 10.0d;
		super.sn = "123456";
		super.validate = "20991231";
	}

}

 

package test.shoppingcart.model;

public class CD extends Commodity {

	private static final long serialVersionUID = 3487982392117475933L;

}

 策略模式应用:

package test.shoppingcart.strategy;

import java.util.List;

import test.shoppingcart.model.Entry;

/**
 * 折扣基类
 * 
 * @author Administrator
 * 
 */
public abstract class Discount {
	/**
	 * 折扣
	 * @param entry 购物单的中物品条目
	 * @param buyEntries 购物单中的物品
	 */
	public abstract void calcDiscount(Entry entry,List<Entry> buyEntries);

}

 

package test.shoppingcart.strategy;

import java.util.List;

import test.shoppingcart.model.Commodity;
import test.shoppingcart.model.Entry;

/**
 * 商品折扣
 * 
 * @author Administrator
 * 
 */
public class CommodityDiscount extends Discount {

	@Override
	public void calcDiscount(Entry entry,List<Entry> buyEntries) {
		Commodity c = entry.getCommodity();
		entry.setOriginalPirce(new Double(c.getPrice() * entry.getCopies()));
		entry.setCurrentPrice(new Double(c.getPrice() * entry.getCopies()));
	}

}

 

package test.shoppingcart.strategy;

import java.util.List;

import test.shoppingcart.model.Commodity;
import test.shoppingcart.model.DVD9;
import test.shoppingcart.model.Entry;

public class DVD9Discount extends CommodityDiscount {

	@Override
	public void calcDiscount(Entry entry, List<Entry> buyEntries) {
		super.calcDiscount(entry, buyEntries);
		Commodity c = entry.getCommodity();
		if (c instanceof DVD9 && entry.getCopies() >= 8) {
			entry.setCurrentPrice(new Double(c.getPrice() * entry.getCopies() * 0.95));
		}
	}

}

 

package test.shoppingcart.strategy;

import java.util.List;

import test.shoppingcart.model.DVDBlue;
import test.shoppingcart.model.Entry;
import test.shoppingcart.model.VCD;

public class VCDDiscount extends CommodityDiscount {

	@Override
	public void calcDiscount(Entry entry, List<Entry> buyEntries) {
		// 商品的价格优惠
		super.calcDiscount(entry, buyEntries);
		// VCD的赠送
		if (entry.getCommodity() instanceof VCD && entry.getCopies() * entry.getCommodity().getPrice() >= 200d) {
			// 赠送的
			Entry present = new Entry(new DVDBlue(), 1, 0d, 0d);
			buyEntries.add(present);
		}
	}
}

 责任链模式应用:

package test.shoppingcart;

import java.util.List;

import test.shoppingcart.model.Entry;
import test.shoppingcart.strategy.Discount;

/**
 * 责任链
 * @author Administrator
 *
 */
public class DiscountChain {
	
	private DiscountChain next;

	private Discount discount;

	public DiscountChain(DiscountChain next, Discount discount) {
		this.next = next;
		this.discount = discount;
	}

	public void handle(Entry entry, List<Entry> buyEntries) {
		discount.calcDiscount(entry, buyEntries);
		if (next != null) {
			next.handle(entry, buyEntries);
		}
	}

}

 程序入口:

package test.shoppingcart;

import java.util.ArrayList;
import java.util.List;

import test.shoppingcart.model.DVD9;
import test.shoppingcart.model.Entry;
import test.shoppingcart.model.VCD;
import test.shoppingcart.strategy.DVD9Discount;
import test.shoppingcart.strategy.VCDDiscount;

/***
 * 结算
 * 
 * @author Administrator
 * 
 */
public class Charge {

	public static void main(String[] args) {
		List<Entry> buyEntries = new ArrayList<Entry>();
		List<Entry> presentEntries = new ArrayList<Entry>();
		Entry vcdEntry = new Entry(new VCD(), 20, 0, 0);
		Entry dvd9Entry = new Entry(new DVD9(), 8, 0, 0);
		buyEntries.add(vcdEntry);
		buyEntries.add(dvd9Entry);
		// 创建责任链条
		DiscountChain chain = new DiscountChain(new DiscountChain(null, new DVD9Discount()), new VCDDiscount());
		Entry entry = null;
		double totalCost = 0d;// 消费总价
		for (int i = 0; i < buyEntries.size(); i++) {
			entry = buyEntries.get(i);
			chain.handle(entry, presentEntries);
			totalCost += entry.getCurrentPrice();//累加消费金额
		}
		buyEntries.addAll(presentEntries);// 添加赠送的商品

		System.out.println("总价:" + totalCost);
		System.out.println(buyEntries.toString());
	}
}

 

 

分享到:
评论

相关推荐

    UML设计模式笔试题.doc

    UML设计模式笔试题 UML 设计模式笔试题是 Java 程序设计的重要组成部分,本文档涵盖了 UML 设计模式、Java 基础知识、多线程编程、Struts2 框架、MVC 模式、设计模式等多方面的知识点。 一、选择题 1. UML 设计...

    UML设计模式笔试题答案.doc

    UML 设计模式笔试题答案 UML(Unified Modeling Language,统一建模语言)是一种软件设计的标准语言,用于描述、构建和文档化软件系统。UML 提供了一种通用的语言和图形表示法,帮助软件开发者更好地理解和描述软件...

    设计模式和框架笔试题

    设计模式和框架笔试题 在软件开发中,设计模式和框架扮演着非常重要的角色。设计模式是一种通用的解决问题的方法,它可以被应用于不同的场景中,而框架则是一种半成品,可以帮助开发者快速地开发出软件系统。在这里...

    设计模式面试专题及答案.pdf

    设计模式是软件工程中一种重要的工具和概念,它代表着针对特定问题而形成的可复用的解决方案。在软件开发中,设计模式通常被分为三大类:创建型模式、结构型模式和行为型模式,它们各自解决不同层面的设计问题。在...

    java 笔试题 j2ee笔试题

    Java笔试题常常涉及到Java语言和J2EE框架的相关知识,以下是对这些知识点...以上就是Java笔试题和J2EE相关的知识要点,这些知识点涵盖了Web应用开发的核心技术和设计模式,对于理解和掌握企业级Java应用开发至关重要。

    校招C&C++笔试题大全

    6. **编程问题**:错误定位、程序优化、设计模式等实战题目。 通过深入学习和解答这些题目,不仅可以巩固理论知识,还能锻炼解决问题的能力,为校招笔试和面试做好充分准备。无论是对初学者还是有一定经验的开发者...

    2009福富笔试题(java,c/c++)海外,电信

    2009福富笔试题(java,c/c++)海外,电信 以下是从给定的文件信息中生成的相关知识点: 1. 复习要点1.jsp 基础(转向,9 大对象) 知识点:jsp 基础、服务器端编程、Java Web 开发 解释:jsp 是一种服务器端编程语言...

    Java笔试题大集合及答案(另附各大公司笔试题)

    Java作为一门广泛使用的编程语言,其笔试题涵盖了基础语法、数据结构、算法、多线程、网络编程、设计模式等多个方面。本资料集合了大量Java笔试题,旨在帮助求职者全面复习并准备Java相关的笔试环节,同时包含了各大...

    Java面试笔试题大汇总(最全+详细答案)

    Java作为一门广泛使用的编程语言,其面试笔试题涵盖了众多领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、数据库操作、设计模式、JVM优化等。以下是对这些知识点的详细阐述: 1. **...

    南瑞笔试题集合

    【南瑞笔试题集合】是针对应届毕业生设计的一系列笔试试题,旨在考察应聘者在IT领域的基础知识、专业技能和解决问题的能力。南瑞,作为中国电力行业的重要企业,其笔试环节通常涵盖计算机科学、软件工程、电力系统等...

    2016年4月方正Java软件工程师笔试题

    【标题】2016年4月方正Java软件工程师笔试题 这是一份针对2016年4月方正公司招聘Java软件工程师时所使用的笔试题目集。方正集团是中国知名的IT企业,其对Java工程师的技术要求通常涵盖了基础语法、面向对象编程、...

    java笔试题汇总及答案(另附各大公司笔试题)

    这份"java笔试题汇总及答案(另附各大公司笔试题)"提供了丰富的学习资源,涵盖了多方面的Java知识,包括但不限于基本语法、集合框架、多线程、异常处理、IO流、网络编程、设计模式等。 1. **Java基本语法**:这...

    spring笔试题28题选择+2简答

    ### Spring笔试题知识点详解 #### 一、依赖注入与控制反转 **知识点1:依赖注入的概念** - **定义**: 依赖注入(Dependency Injection, DI)是一种设计模式,它提倡通过构造函数、setter方法或者接口来注入一个类...

    java笔试题加答案(单选,多选,判断,简答)

    Java笔试题是评估应聘者Java编程能力的重要环节,通常包括单选题、多选题、判断题和简答题。这些题目覆盖了Java语言的核心概念、类库、编程规范以及问题解决能力。以下是一些可能出现在Java笔试题中的关键知识点: ...

    delphi笔试题1

    10. **设计模式**:熟悉常见的设计模式,如单例、工厂、观察者等,它们是解决特定问题的标准解决方案。 在解答Delphi的笔试题时,可能会遇到编写代码片段、分析代码错误、优化性能、实现特定功能等问题。对于...

    Zingfront智线_技术笔试题2018版B(最最最新版本)

    综上所述,这份笔试题覆盖了算法设计、数据结构、编程实现、时间管理等多个方面,是一个综合性很强的技术能力评估。通过这些题目,智线可以筛选出真正具备扎实基础、高效解决问题能力和良好编程习惯的候选人。

    百度笔试题 百度 笔试题

    【百度笔试题】中的知识点主要涉及三个方面:编程题、算法题和系统设计。下面将分别对这三个方面进行详细的解析。 1. **编程题** 这道编程题要求编写一个函数`is_include(char *a, char *b)`,判断字符串`b`的所有...

    2018京东秋招设计类笔试题.pdf

    2018京东秋招设计类笔试题 这是一份京东2018秋招设计类笔试题,涵盖了多个领域的知识点,包括公共关系、领导力、社会学、道德律、逻辑思维、设计等。以下是对每个问题的详细解析: 1. 假设你是单位公关部职员,...

    java外包笔试题两套.zip

    7. **设计模式**:可能会考察单例、工厂、观察者等常见设计模式的理解与应用。 "java外包笔试F卷.docx"的难度相对较高,可能是为中高级程序员准备的,可能涵盖以下进阶知识点: 1. **JVM内存模型**:理解堆、栈、...

Global site tag (gtag.js) - Google Analytics