`
conkeyn
  • 浏览: 1507186 次
  • 性别: 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设计模式笔试题.docUML设计模式笔试题.docUML设计模式笔试题.docUML设计模式笔试题.doc

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

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

    设计模式和框架笔试题

    关于设计模式和框架的笔试面试题,找了好久才找到 的,应届生绝对用的着

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

    设计模式面试专题及答案

    c#经典教程/设计模式/笔试宝典/面试题(2/2)

    本压缩包主要内容为c#教程(书籍)及一些经典资料,主要包括有: ...23种设计模式.pdf c++笔试面试宝典2009版.doc 程序员面试宝典.pdf 高质量C++-C编程指南.mht 注意:共有两个分卷,这是分卷2。

    c#经典教程/设计模式/笔试宝典/面试题(1/2)

    本压缩包主要内容为c#教程(书籍)及一些经典资料,主要包括有: ...23种设计模式.pdf c++笔试面试宝典2009版.doc 程序员面试宝典.pdf 高质量C++-C编程指南.mht 注意:共有两个分卷,这是分卷1。

    迅雷2010Java笔试题哈尔滨站

    迅雷2010Java笔试题哈尔滨站第二轮笔试题 1. 以下代码是某种设计模式的一种实现方式: public class LazyModel { private static LazyModel instance =null; private static Object lock = new Object(); ...

    Java程序员笔试题汇编

    应聘Java程序员参考资料。共149题,含参考答案。主要包括以下几方面的试题:Java基础、多线程、JSP、Servlet、JDBC、XML、EJB、服务器、MVC、JavaEE、设计模式、Linux、代码改错等。

    4399大数据笔试题.pdf

    4399⼤数据笔试题 今天晚上参加了厦门 今天晚上参加了厦门4399公司的⼤数据笔试,⾃⼰没有拍下题⽬,⼀下是根据⾃⼰在草稿纸上简要记录回忆下 公司的⼤数据笔试,⾃⼰没有拍下题⽬,⼀下是根据⾃⼰在草稿纸上简要...

    腾讯面试题笔试题

    海量面试题,含答案,带答案, 华为,百度,新浪,阿里巴巴,微软,microsoft,IBM,腾讯,中软,Google,网易,神州数码,新蛋,思科,Cisco 淘宝,奇虎,中国移动,东软,...面试题,笔试题,Java,设计模式,算法,前端

    2022网易互联网后端笔试题

    整除、超级键盘、算数、数字迷宫、设计模式中,适配器模式和装饰器模式有什么区别?

    招银网络java科技笔试题-WaytoInterview:JVM和设计模式和算法的快速浏览

    招银网络java科技笔试题 2018 秋招刷题汇总 :flexed_biceps: 如果你觉得有帮助请点个 star,谢谢!欢迎 Follow 我 :hot_beverage: 深入Java虚拟机 简单的Java虚拟机探索之旅以及内存溢出问题探究 堆内存溢出(不断...

    c++面试笔试题

    c++面试笔试练习题,各种面试题 23种设计模式(C++).pdf 2008年9月二级C++笔试真题及答案【选择题】.pdf 2009_C++笔试题目B.doc C+++_set.pdf C++面试汇总.doc

    java笔试题集(java基础,JAVAEE,JAVASE,21种设计模式)

    是一个关于java的笔试题集,其中包括javaEE部分,javaSE部分,以及java中的23中设计模式,是个不错的笔试题集。

    Java开发工程师笔试题(带答案).pdf

    一套Java开发工程师笔试试题 (请不要在试题上留任何痕迹,所有答案均写在答题纸上) ...最后一道简答题关于设计模式的题目见博客: https://blog.csdn.net/zhangvalue/article/details/104236638

    中科大洋笔试题

    2010.11北京中科大洋笔经 设计模式题 多次出现

    高级java笔试题-java:Java

    高级java笔试题 java ​ 欢迎大家进入马士兵大学,希望大家在这里能够学到自己想要学习的技术,获得提升,找到理想的工作! ​ 本课程最贴合企业级需求的java基础课程,向上有完整的知识点覆盖,除了语言自身,...

    完美世界大数据笔试.pdf

    设计模式,还要通过java代码看懂属于哪种设计模式 2. 如何提⾼读写性能 3. 异常类的继承 4. java修饰符的使⽤ 5. 内部类的作⽤范围 6. 继承与重载 7. 看java代码计算结果 8. hashmap,hashtable区别 9. ArrayList,...

    java 面试笔试题

    Java就业面试题大全 包括: 1. Java基础部分 2. 特高深的Java问题 2. Java代码查错 2. 算法与编程 ...9. 软件工程与设计模式 10. Linux 10. 问得稀里糊涂的题 10. 其他 真的很全啊。word 文档就 400kb.

Global site tag (gtag.js) - Google Analytics