抽象a直接依赖于实现细节b
抽象a直接依赖于抽象B,实现细节b依赖于抽象B。
在软件系统中。经常面临着“某些结构复杂的对象”
如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些交易对象”。
从而使得“依赖这些易变对象的客户程序”不随便需求改变而改变。
假设我们现在有我们现在开发一个游戏系统
里面有很都个角色都作自己的事情。
于是我们就下出下面
经过分析得到这几个角色是一些不断变法的的对象
现在怎么办?
想想设计模式;应用于变法的设计模式。
先找那个是不变的
那些是变的
把不变的抽象成接口 于是有有这个结构
public
void
GameSystem
... {
public void run()
...{
NormalActor noramlActor1=new NormalActor();
NormalActor noramlActor2=new NormalActor();
NormalActor noramlActor3=new NormalActor();
flyactor flyactor1=new flyactory();
flyactor flyactor2=new flyactory();
flyactor flyactor3=new flyactory();
WaterActor waterActor1=new WaterActor();
WaterActor waterActor2=new WaterActor();
WaterActor waterActor3=new WaterActor();
}
}
... {
public void run()
...{
NormalActor noramlActor1=new NormalActor();
NormalActor noramlActor2=new NormalActor();
NormalActor noramlActor3=new NormalActor();
flyactor flyactor1=new flyactory();
flyactor flyactor2=new flyactory();
flyactor flyactor3=new flyactory();
WaterActor waterActor1=new WaterActor();
WaterActor waterActor2=new WaterActor();
WaterActor waterActor3=new WaterActor();
}
}
原型设计模式
意图:
使用原型实例制定创阶对象的种类。然后通过高背这些原型来创建新的对象。
抽象类
public
abstract
class
NormalActor
implements
Cloneable
... {
public abstract NormalActor clone();
}
public abstract class FlyActor implements Cloneable
... {
public abstract NormalActor clone();
}
public abstract FlyActor WaterActor implements Cloneable
... {
public abstract WaterActor clone();
}
... {
public abstract NormalActor clone();
}
public abstract class FlyActor implements Cloneable
... {
public abstract NormalActor clone();
}
public abstract FlyActor WaterActor implements Cloneable
... {
public abstract WaterActor clone();
}
/
具体类
public
class
NormalActorA
extends
NormalActor
... {
public NormalActor clone()
...{
return (NormalActorA)this.clone()
}
}
public class FlyActorA extends FlyActo
... {
.............
}
public class WaterActorA extends WaterActor
... {
....
}
... {
public NormalActor clone()
...{
return (NormalActorA)this.clone()
}
}
public class FlyActorA extends FlyActo
... {
.............
}
public class WaterActorA extends WaterActor
... {
....
}
/
public
class
Gamesystem
... {
public void run(NormalActor normalActor1,flyactory flyactor,WaterActor wateracto)
...{
NormalActor noramlActor1=normalactor.clone();
NormalActor noramlActor2=normalactor.clone();
NormalActor noramlActor3=normalactor.clone();
Flyactor flyActor1=new flyactor.clone();
Flyactor flyActor2=new flyactor.clone();
Flyactor flyActor3=new flyactor.clone();
WaterActor waterActor1=wateractor.clone();
WaterActor waterActor2=wateractor.clone();
WaterActor waterActor3=wateractor.clone();
}
这样在编译前就没有有依赖关系。
... {
public void run(NormalActor normalActor1,flyactory flyactor,WaterActor wateracto)
...{
NormalActor noramlActor1=normalactor.clone();
NormalActor noramlActor2=normalactor.clone();
NormalActor noramlActor3=normalactor.clone();
Flyactor flyActor1=new flyactor.clone();
Flyactor flyActor2=new flyactor.clone();
Flyactor flyActor3=new flyactor.clone();
WaterActor waterActor1=wateractor.clone();
WaterActor waterActor2=wateractor.clone();
WaterActor waterActor3=wateractor.clone();
}
这样在编译前就没有有依赖关系。
}
总结
prototype模式用于隔离类对象的使用者和躯体类型(易变类)之间的耦合关系,
他同样要求这些“易变类”拥有“稳定的接口”;
prototye模式对于“如何创建易变的尸体对象”采用“原型克隆”的方法来作。他的使用我们可以非常
灵活地动态创建“拥有某些稳定接口”地新对象-所需工作仅仅是注册一个新类地对象
(即原型),然后在任何需要地地方不断地Clone。