alonestarsz

博客园 首页 新随笔 联系 订阅 管理

 

using System;

namespace Factory.EntityFolder
{
    
/// <summary>
    
/// 抽象Shape
    
/// </summary>

    public abstract class Shape
    
{
        
public string name; 

        
public Shape(string name) 
        
{
            
this.name = name;
        }



        
/// <summary>
        
/// 删除Shape
        
/// </summary>

        public abstract void  draw();


        
/// <summary>
        
/// 删除Shape
        
/// </summary>

        public abstract void erase() ;

    }

public class Circle : Shape
    
{
        
public Circle(string name) :base(name)
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }



        
/// <summary>
        
/// Circle的制作方法
        
/// </summary>

        public override   void draw() 
        
{
            System.Console.WriteLine(
"It will draw a circle.");
        }



        
/// <summary>
        
/// Circle的删除方法
        
/// </summary>

        public override  void erase () 
        
{
            System.Console.WriteLine(
"It will erase a circle.");
        }



        
    }

    
public class Square:Shape
    
{
        
public Square(string name) :base(name)
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
/// <summary>
        
/// Square的制作方法
        
/// </summary>

         public override void draw() 
        
{
            System.Console.WriteLine(
"It will draw a circle.");
        }



        
/// <summary>
        
/// Square的删除方法
        
/// </summary>

         public override void erase () 
        
{
            System.Console.WriteLine(
"It will erase a circle.");
        }

    }

}


namespace Factory.FactoryFolder
{
using System;
using Factory.EntityFolder;
    
/// <summary>
    
/// CircleFactory 的摘要说明。
    
/// </summary>

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

        
protected override Shape factoryMethod(String aName) 
        
{
            
return new Circle(aName + " (created by CircleFactory)");
        }

    }

    
/// <summary>
    
/// ShapeFactory 的摘要说明。
    
/// 优点:不涉及具体子类,达到封装效果,也就减少错误修改的机会
    
///      工厂方法(Factory Method) 抽象工厂(Abstract Factory)
    
/// 一个系统要独立于它的产品的创建、组合和表示时。 
    
///一个系统要由多个产品系列中的一个来配置时。 
    
///当你要强调一系列相关的产品对象的设计以便进行联合使用时。 
    
///当你提供一个产品类库,而只想显示它们的接口而不是实现时。
    
/// </summary>

    public  abstract class ShapeFactory
    
{
        
/// <summary>
        
/// 当一个类不知道它所必须创建的对象的类的时候。 
        
///当一个类希望由它的子类来指定它所创建的对象的时候。 
        
///当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
        
/// </summary>
        
/// <param name="aName"></param>
        
/// <returns></returns>

        protected abstract Shape factoryMethod(String aName);
        
// 在anOperation中定义Shape的一系列行为
    
        
public void anOperation(String aName)
        
{
            Shape s 
= factoryMethod(aName);
            System.Console.WriteLine(
"The current shape is: " + s.name);
            s.draw();
            s.erase();
        }

    }

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

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

        
/// <summary>

        
/// </summary>
        
/// <param name="aName"></param>
        
/// <returns></returns>

        protected override Shape factoryMethod(String aName) 
        
{
            
return new Square(aName + " (created by SquareFactory)");
        }

    }

}

测试文件如下:

using System;
using Factory.FactoryFolder;


namespace Factory
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class FactoryTest
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   ShapeFactory sf1 = new SquareFactory();
   ShapeFactory sf2 = new CircleFactory();
   sf1.anOperation("SquareFactory");
   sf2.anOperation("CircleFactory");
   System.Console.ReadLine();
  }
 }
}

posted on 2004-11-19 16:23  天煞孤星  阅读(413)  评论(0编辑  收藏  举报