设计模式就是来解决应变---原型(prototype)

来源:互联网 发布:js身份证正则表达式 编辑:程序博客网 时间:2024/05/21 11:22


抽象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 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 class NormalActorA extends NormalActor
{
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();


}


这样在编译前就没有有依赖关系。

 

}


总结
   prototype模式用于隔离类对象的使用者和躯体类型(易变类)之间的耦合关系,
他同样要求这些“易变类”拥有“稳定的接口”;
   prototye模式对于“如何创建易变的尸体对象”采用“原型克隆”的方法来作。他的使用我们可以非常
灵活地动态创建“拥有某些稳定接口”地新对象-所需工作仅仅是注册一个新类地对象
(即原型),然后在任何需要地地方不断地Clone。