设计模式作业

一、计算器的简单工厂模式实现代码及UML图

1、UML图

2、代码

package T4;

public  class Operation {
private double _numberA=0;
private double _numberB=0;
public double get_numberA() {
	return _numberA;
}
public void set_numberA(double _numberA) {
	this._numberA = _numberA;
}
public double get_numberB() {
	return _numberB;
}
public void set_numberB(double _numberB) {
	this._numberB = _numberB;
}
public double GetResult() {
	double result=0;
	return result;
}
}
package T4;

public class Add extends Operation {

	@Override
	public double GetResult() {
		// TODO Auto-generated method stub
		double result=0;
		result=get_numberA()+get_numberB();
		return result;
	}

}
package T4;

public class Div extends Operation  {
	@Override
	public double GetResult()  {
		// TODO Auto-generated method stub
		double result = 0;
		try {
			result = get_numberA() / get_numberB();
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println(e.getStackTrace());
		}
		
		return result;
	}
}
package T4;

public class Mul extends Operation {

	@Override
	public double GetResult() {
		// TODO Auto-generated method stub
		double result = 0;
		result = get_numberA() * get_numberB();
		return result;
	}

}
package T4;

public class Sub extends Operation {

	@Override
	public double GetResult() {
		// TODO Auto-generated method stub
		double result = 0;
		result = get_numberA() - get_numberB();
		return result;
	}

}
package T4;

public class OprationFactory {
public static Operation createOperation(String operation1) {
	
	Operation oper = null;
	
	switch (operation1) {
	case "+":
		oper=new Add();
		break;
	case "-":
		oper=new Sub();
		break;
	case "*":
		oper=new Mul();
		break;
	case "/":
		oper=new Div();
		break;
	}
	
	return oper;
	
}
}
package T4;

public class Test {
public static void main(String[] args) {
	Operation operation;
	operation=OprationFactory.createOperation("+");
	operation.set_numberA(1);
	operation.set_numberB(2);
	double result=operation.GetResult();
}
}

二、收银软件的策略模式实现代码及UML图

1、UML图

 2、代码

package T5;

public  abstract class CashSuper {
public abstract double accCash(double money) ;
	
}
package T5;

public class CashNormal extends CashSuper{

	@Override
	public double accCash(double money) {
		// TODO Auto-generated method stub
		return money;
	}

}
package T5;

public class CashRebate extends CashSuper {
	private double bate = 1d;

	public CashRebate(double bate) {
		super();
		this.bate = bate;
	}

	@Override
	public double accCash(double money) {
		// TODO Auto-generated method stub

		return money*bate;
	}

}
package T5;

public class CashReturn extends CashSuper {
	private double condation = 0.0d;
	private double CashReturn = 0.0d;

	public CashReturn(double condation, double cashReturn) {
		super();
		this.condation = condation;
		CashReturn = cashReturn;
	}

	@Override
	public double accCash(double money) {
		// TODO Auto-generated method stub
		double result =money;
		if (money>=condation) {
			result=money-Math.floor(money/condation)*CashReturn;
		}
		return result;
	}

}
package T5;

public class CshContext {
	private CashSuper cashSuper;

	public CshContext(CashSuper cashSuper) {
		super();
		this.cashSuper = cashSuper;
	}

	public double GetResult(double money) {
		return cashSuper.accCash(money);

	}
}

 

package T5;

public class Click {
double total =0.0d;
private void casebtn(String select,double money) {
	CshContext cshContext=null;
	switch (select) {
	case "正常收费":
		cshContext=new CshContext(new CashNormal());
		break;
	case "满300反100":
		cshContext=new CshContext(new CashReturn(300,100));
		break;
	case "打八折":
		cshContext=new CshContext(new CashRebate(0.8));
		break;
	default:
		break;
	}
	double totalprice=0.0d;
	totalprice=cshContext.GetResult(money);
	total=totalprice+total;
	System.out.println("收费为"+total);
	
	
}
}

三、收银软件的策略模式+简单工厂模式实现代码及UML图

1、UML图

package T5;

public class CashContext {
CashSuper cashSuper=null;

public CashContext(String type) {
	switch (type) {
	case "正常收费":
		CashNormal csCashNormal=new CashNormal();
		cashSuper=csCashNormal;
		break;
	case "满300反100":
		CashReturn cs=new CashReturn(300,100);
		cashSuper=cs;
		break;
	case "打8折":
		CashRebate cashRebate=new CashRebate(0.8);
		cashSuper=cashRebate;
		break;
	default:
		break;
	}
}
public double getresult(double money) {
	return cashSuper.accCash(money);
}
}
public class Click1 {
double total =0.0d;
public void click1(String select,double money,String type) {
	CashContext cashContext=new CashContext(type);
	double totalprice=0.0d;
	totalprice=cashContext.getresult(money);
	total+=totalprice;
	System.out.println("总金额为"+total);
}
}

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式有相关源码) Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Adapter:将一个类的接口转换成客户希望的另一个接口,使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。 Bridge:将抽象部分与它的实现部分分离,使之可以独立变化。 Chain of Responsibility:为解除请求的发送者和接收者之间的耦合,而使多个对象有机会处理这个请求。将这些请求连成一个链,并沿着这条链传递该请求,直到有个对象处理它。 Command:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可以取消的操作。 Composite:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。 Decorator:动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更加灵活。 Facade:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,使得这个子系统更加容易使用。 Factory Method:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method让一个类的实例化延迟到子类。 Flyweight:运用共享技术有效的支持大量细粒度的对象。 Interpreter:给定一个语言,定义它的文法的一种表示,并定义一个解释器用于解释特定文法。 Iterator:提供一种方法顺序访问一个聚合对象中的各种元素,而无需暴露该对象的内部表示。 Mediator:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式相互引用,从而使得耦合松散,可以独立改变相互之间的交互。 Memento:不破坏封装的前提下,捕获对象的内部状态,并在该对象之外保存这个状态。 Observer:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生变化时依赖于它的所有的对象都得到通知和刷新。 Prototype:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。 Proxy:为其他对象提供一个代理以控制对这个对象的访问。 Singleton:保证一个类仅有一个实例,并提供一个访问它的全局点。 State:允许一个对象再内部状态改变的时候改变它的行为。对象看起来似乎修改了所属的类。 Strategy:定义一系列的算法,把他们封装起来,并可以相互替换,使算法独立于客户。 Template Method:定义一个操作中的算法骨架,而将这些算法的具体实现的代码延迟到子类中完成。 Visitor:标识一个作用于某对象结构中的各元素的操作,在不改变各元素的类的前提下定义作用于这个元素的新操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值