fac method

 

工厂方法模式是类的创建模式,又叫做虚拟构造子模式或多态性工厂模式。它的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。

简单工厂模式的缺点:

由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。

工厂方法模式的优点:

在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将创建的工作交给子类去做。这个核心类成为一个抽象工厂的角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类实例化的细节。这使得工厂方法模式可以允许系统在不修改具体工厂角色的情况下引进新的产品,使其具有超越简单工厂模式的优越性。

 

以下面情况为例讨论该模式的具体实现:

抽象工厂角色Creator):担任工厂方法模式的核心,规定创建对象的工厂类应该实现的接口。

具体工厂角色ConcereteCreator):负责具体产品对象的创建,实现Creator规定的接口。

抽象产品角色Product):工厂方法模式所创建对象的超类型,规定产品应具有的接口。

具体产品角色ConcreteProduct):实现Product所规定的接口。

示例代码如下:

using System;

namespace ConsoleApplication2
{
 // Creator:

 public abstract class Creator

 {

 public abstract Product factory();//工厂方法

 }

 

 // ConcreteCreator1:

 class ConcreteCreator1:Creator

 {

  public override Product factory()//工厂方法

  {

   return new ConcreteProduct1();

  }

 }

 

 // ConcreteCreator2:

 class ConcreteCreator2:Creator

 {

  public override Product factory()//工厂方法

  {

   return new ConcreteProduct2();

  }

 }

 

 // Product:

 public abstract class Product

 {

        

 }

 

 // ConcreteProduct1:

 class ConcreteProduct1:Product

 {

  public ConcreteProduct1()

  {

   Console.WriteLine ("Creat ConcreteProduct1");

  }

         

 }

 

 // ConcreteProduct2:

 class ConcreteProduct2:Product

 {

  public ConcreteProduct2()

  {

   Console.WriteLine ("Creat ConcreteProduct2");

  }

         

 }

 

 // Client:

 class Client

 {

  private static Creator creator1,creator2;

  private static Product product1,product2;

  [STAThread]

  static void Main(string[] args)

  {

   creator1=new ConcreteCreator1 ();

   product1=creator1.factory();

   creator2=new ConcreteCreator2 ();

   product2=creator2.factory();

  }

 }
}

model new model title 'Testing Bonded Particle Model' model domain extent -5 5 condition destroy contact cmat default model linear method deform emod 1.0e7 kratio 0.0 contact cmat default property dp_nratio 0.5 lin_mode 0 wall generate box -2.1 2.1 -4.2 4.2 model random 10002 ball distribute porosity 0.1 radius 0.05 0.07 box -2 2 -4 4 group 'matrix' ball attribute density 2500 damp 0.7 model cycle 1000 calm 10 [max_vel = 1] [txx = 5.0e3] [tyy = 5.0e3] [gain_update_freq = 5] [gain_safety_fac = 0.3] define compute_wallstress global wlx = wall.pos.x(wall.find(2)) - wall.pos.x(wall.find(4)) global wly = wall.pos.y(wall.find(3)) - wall.pos.y(wall.find(1)) wsyy = -0.5 * (wall.force.contact.y(wall.find(1)) - wall.force.contact.y(wall.find(3))) / wlx wsxx = -0.5 * (wall.force.contact.x(wall.find(4)) - wall.force.contact.x(wall.find(2))) / wly p1 = vector(0,tyy *wlx) p2 = vector(txx *wly,0) tolx = math.abs((wsxx-txx)/txx) toly = math.abs((wsyy-tyy)/tyy) if tolx<1.0e-2 if toly<1.0e-2 compute_wallstress=1 endif endif end @compute_wallstress wall servo force [p1] velocity-max [max_vel] gain-factor [gain_safety_fac] gain-update [gain_update_freq] activate on range id 1 wall servo force [-p2] velocity-max [max_vel] gain-factor [gain_safety_fac] gain-update [gain_update_freq]activate on range id 2 wall servo force [-p1] velocity-max [max_vel] gain-factor [gain_safety_fac] gain-update [gain_update_freq] activate on range id 3 wall servo force [p2] velocity-max [max_vel] gain-factor [gain_safety_fac] gain-update [gain_update_freq] activate on range id 4 history id 11 @wsxx history id 12 @wsyy model solve fish-halt @compute_wallstress
最新发布
03-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值