简单工厂模式及例子

简单工厂模式

  • 简介: 简单工厂模式就是使用一个工厂类接收传来的参数去决定创建哪一个对象,在这之前要有一个抽象接口,将产品抽象去实现这个接口。
  • 缺点:一旦将工厂类写完。就难以更改工厂生产的产品,不好拓展
  1. 举例::超市的结账系统。设计一个货物接口,让每一种货物去实现这个接口。然后设计工厂类,根据用户的选择,去创建一个货物(向上转型)对象
package bitdemo1;

public class Shopping {
	public static goods creatgood(String name){
		if(name.equals("网球鞋")) {
			return new Qiuxie();
		}else if(name.equals("网球拍")){
			return new Qiupai();
		}else if(name.equals("T恤")){
			return new Tshirt();
		}
		return null;
	}
	
	public static double payMoney(goods[] goods, int discount){
		//计算需要支付的钱
		double money = 0;
		for(int i = 0; i < goods.length; i++) {
			money =money + goods[i].getPrices();
		}
		return money*discount/10;
	}
	
	public static double addIntegral(goods[] goods,int discount,person person) {
		//计算积分
		double money = payMoney(goods, discount);
		person.addIntegral(money*0.08);
		return money*0.01;
	}
	
	public static boolean isPrint(goods[] goods, goods good, int locale) {
		//判断是否有重复的商品
		for(int i = 0; i < locale; i++) {
			if(goods[i].getClass().equals(good.getClass())) {
				return false;
			}
		}
		return true;
	}
	
	public static void printgoodsList(goods[] goods,int discount,person person) {
		//打印清单及详情
		System.out.println("===========商品清单=============\n"+"商品名称"+"\t"+"单价"+"\t"+"数量"+"\t"+"单品总价");
		for(int i = 0; i < goods.length; i++) {
			if(isPrint(goods,goods[i],i)) {
				System.out.println(goods[i].getName()+"\t"+"¥"+goods[i].getPrices()+"\t"
				+goods[i].getcount()+"\t"+"¥"+goods[i].getcount()*goods[i].getPrices());
			}
		}
		System.out.println("===============================");
		double money = payMoney(goods,discount);
		System.out.println("总计:"+money*10/discount+"\n"+"折扣:"+discount+"\n"+"应付金额:"+money+"\n"
				+"获得积分:"+addIntegral(goods, discount, person));
	}
	
	
	public static void main(String[] args) {
		person person = new person();
		goods[] goods= new goods[5];
		goods[0] = creatgood("网球拍");
		goods[1] = creatgood("网球鞋");
		goods[2] = creatgood("T恤");
		goods[3] = creatgood("T恤");
		goods[4] = creatgood("网球拍");
		printgoodsList(goods,5,person);
	}

}
class person{
	private static double integral;
	public double getIntegral() {
		return integral;
	}

	public void addIntegral(double d) {
		this.integral = d + this.integral;
	}
}
abstract class goods{
	public abstract int getcount();
	public abstract double getPrices();
	public abstract String getName();

}
class Qiuxie extends goods{
	private  double prices = 570;
	private  String name = "网球鞋";
	private static int count  = 0 ;
	public Qiuxie() {
		count++;
	}
	public double getPrices() {
		return prices;
	}
	public String getName() {
		return name;
	}
	public int getcount() {
		return count;
	}
}
class Tshirt extends goods{
	private double price = 245;
	private String name = "T恤";
	private static int count  = 0 ;
	public int getcount() {
		return count;
	}
	Tshirt() {
		count ++ ;
	}
	public double getPrices() {
		return price;
	}
	public String getName() {
		return name;
	}
}
class Qiupai extends goods{
	private double price = 320;
	private String name = "网球拍";
	private static int count  = 0 ;
	public Qiupai() {
		count++;
	}
	public double getPrices() {
		return price;
	}
	public String getName() {
		return name;
	}
	public int getcount() {
		return count;
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值