当前:原型
需求:坦克大战
创建两种坦克
坦克类型 | 射程 | 速度 |
b70 | 70米 | 时/70公里 |
b50 | 50米 | 时/50公里 |
类图
代码说明
Function:机能描述
IPrototype<ITank> 一个需要实现自拷贝功能的接口
ITank:一个坦克的接口,需要实现设计的功能,因该模式需要,并未实现上面要啊的全部需求。
B70Tank/B50Tank:俩个具有自拷贝机能的类。
模式说明:
要点:一个具有通过拷贝自己而创建对象的模型,就是原型模式。(有这个就可以叫模式了,只有真的的模式价值需要结合需求去体悟,不用太纠结,如果真的有合适的需求你就立马明白了)
意图:用原型实例创建对象种类,并且通过拷贝这些原型创建对象。
代码
class Function{
public String mStr;
Function(String str){
mStr = str;
}
public void exe() {
System.out.println(mStr);
}
};
interface IPrototype<ITank>{
ITank clone();
}
interface ITank{
void shot();
}
abstract class Tank implements ITank,IPrototype<ITank>{
Function mFunction;
public Tank(Function m) {
mFunction = m;
}
public ITank clone() {
return create();
}
public void shot() {
mFunction.exe();
}
abstract public ITank create();
}
class B70Tank extends Tank{
public B70Tank() {
super(new Function("射击距离70米"));
}
private B70Tank(Function m) {
super(m);
}
public ITank create() {
return new B70Tank(mFunction);
}
}
class B50Tank extends Tank{
public B50Tank() {
super(new Function("射击距离50米"));
}
private B50Tank(Function m) {
super(m);
}
public ITank create() {
return new B50Tank(mFunction);
}
}
public class Client {
public static void main(String[] args) {
//“该模式的代码只能说是实现了原型模式,并未体现出原型解决问题的优势”
//“如果输能够解决问题,就不用添加新的类型了”
System.out.println("hello worldff !");
Tank b7 = new B70Tank();
b7.shot();
ITank b72 = b7.clone();
b72.shot();
}
}
运行结果