工厂方法模式与单件模式结合示例
好久前就听周边人说设计模式,自己也在园子里或其他网站逛了逛,看了些设计模式文章。但看完后没总结,没消化,前几天回贴就回错了。仔细想想,还得多写,多练。
今天写的是工厂方法模式和单件模式结合示例,在这里我主要以转载别人的总结和自己的DEMO。目的就是方便我和其他初学者对设计模式的初步了解。
首先贴上两模式的意图和结构图
工厂方法模式(Factory Method)
意图
定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
结构图
意图
定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
结构图
单件模式(Singleton Pattern)
意图
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
模型图
逻辑模型图:
物理模型图:
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/