工厂方法模式与单件模式结合示例

好久前就听周边人说设计模式,自己也在园子里或其他网站逛了逛,看了些设计模式文章。但看完后没总结,没消化,前几天回贴就回错了。仔细想想,还得多写,多练。

今天写的是工厂方法模式和单件模式结合示例,在这里我主要以转载别人的总结和自己的DEMO。目的就是方便我和其他初学者对设计模式的初步了解。

首先贴上两模式的意图和结构图

 

工厂方法模式(Factory Method

意图

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

结构图

 

意图

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

结构图

单件模式(Singleton Pattern

意图

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

模型图

逻辑模型图:

物理模型图:

 

DEMO:

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Configuration;
namespace FactoryMethod_Singleton
{

    abstract class Shape
    {
        public string name;
        public Shape(string aName)
        {
            name=aName;
        }
        public abstract void Draw();
        public abstract void Erase();
    }

    class Circle : Shape
    {
        public Circle(string aName) : base(aName)
        {
            Console.WriteLine("it will Create a circle,name is "+aName);
        }

        public override void Draw()
        {
            Console.WriteLine("draw circle");
        }

        public override void Erase()
        {
            Console.WriteLine("erase circle");
        }
    }

    class Square : Shape
    {
        public Square(string aName): base(aName)
        {
            Console.WriteLine("it will Create a square,name is " + aName);
        }

        public override void Draw()
        {
            Console.WriteLine("draw square");
        }

        public override void Erase()
        {
            Console.WriteLine("erase square");
        }
    }

    abstract class ShapeFactory
    {
        public abstract Shape Create(string aName);
    }

    class CircleFactory : ShapeFactory
    {
        public override Shape Create(string aName)
        {
            return new Circle(aName);
        }
    }

    class SquareFactory : ShapeFactory
    {
        public override Shape Create(string aName)
        {
            return new Square(aName);
        }
    }

    sealed class Factory
    {
       static string strfactoryName = ConfigurationSettings.AppSettings["factoryName"];
       static readonly ShapeFactory instance = (ShapeFactory)Assembly.Load("FactoryMethod_Singleton").CreateInstance("FactoryMethod_Singleton." + strfactoryName);
      
       static Factory() { Console.WriteLine("static Factory"); }
       Factory() { Console.WriteLine("Factory"); }

        public static ShapeFactory Instance
        {
            get
            {
                return instance;
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ShapeFactory factory=Factory.Instance;
            Shape circle1 = factory.Create("circle1");
            circle1.Draw();

            ShapeFactory factory1 = Factory.Instance;//验证静态模式
            Shape circle2 = factory1.Create("circle2");
            circle2.Draw();
            Console.Read();
        }
    }


}

 

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <appSettings>

    <add key="factoryName" value="CircleFactory"></add>

  </appSettings>

</configuration>

 源码下载

参考文献:

http://terrylee.cnblogs.com/archive/2006/01/04/310716.html

http://terrylee.cnblogs.com/archive/2005/12/09/293509.html

http://www.ibm.com/developerworks/cn/java/designpattern/factory/

 

posted @ 2009-07-24 14:02  sucbert  阅读(299)  评论(0编辑  收藏  举报