zoukankan      html  css  js  c++  java
  • C#设计模式_创建型_FactoryMethod模式(learn from Lijianzhong & others)

    意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
    适用性:

    • 当一个类不知道它所必须创建的对象的类的时候。
    • 当一个类希望由它的子类来指定它所创建的对象的时候。
    • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

    结构:

    using System;

    namespace DesignPattern
    {
     /// <summary>
     /// FactoryMethod 的摘要说明。
     /// </summary>
     public abstract class AbstractCar
     {
      public abstract void Start();
      public abstract void Run();
      public abstract void Turn(Direction direction);
      public abstract void Stop();
     }
     public class CarTestFramework
     {
      public void BuildTestContext(CarFactory carFactory)
      {
       AbstractCar c1 = carFactory.CreateCar();
       AbstractCar c2 = carFactory.CreateCar();
       AbstractCar c3 = carFactory.CreateCar();
       AbstractCar c4 = carFactory.CreateCar();
      
      }
      public void DoTest(AbstractCar car)
      {
       car.Run();
      }
      public TestData GetTestData()
      {
      
      }
     }
     public abstract class CarFactory{
      public abstract Car CreateCar();
      
     }
     public class HongqiCar: AbstractCar{
      Engine engin1;
      Engine engin2;
      Engine engin3;
      Engine engin4;
      public override void Start(){}
      public override void Run(){}
      public override void Turn(Direction direction){}
      public override void Stop(){}
     }
     public class DongfengCar : AbstractCar{
      Engine engin1;
      Engine engin2;
      public override void Start(){}
      public override void Run(){}
      public override void Turn(Direction direction){}
      public override void Stop(){}
     }
     public class HongqiCarFactory : CarFactory
     {
      public override AbstractCar CreateCar()
      {
       return new HongqiCar();
      }

     }
     public class DongfengCarFactory : CarFactory
     {
      public override AbstractCar CreateCar()
      {
       return new DongfengCar();
      }
     }

     class App
     {
      public static void Main(){   
       CarTestFramework carTestFamework = new CarTestFramework();
       carTestFamework.BuildTestContext(new HongqiCarFactory());
       CarTestFramework carTestFamework = new CarTestFramework();
       carTestFamework.BuildTestContext(new DongfengCarFactory());

       //Activator.CreateInstance(string TypeName)
      }
     }


     public class FactoryMethod
     {
      public FactoryMethod()
      {
       //
       // TODO: 在此处添加构造函数逻辑
       //
      }
      
     }
    }

  • 相关阅读:
    Android Studio Tips -- 布局预览
    weibo sdk Multiple dex files define Lcom/sina/weibo/sdk/BuildConfig
    Android Studio下添加assets目录
    Android中bitmap图片透明度的处理(以撕美女衣服为例)
    Android中使用ViewPage进行广告轮播测试代码
    比赛现场打分管理平台概述
    排行榜每页默认为8行,如何把默认行数改成12行或其他行数?
    复习重点补充-
    字典读写训练
    Python爬网常见方法:find_all与re的结合使用
  • 原文地址:https://www.cnblogs.com/taoeternal/p/635869.html
Copyright © 2011-2022 走看看