- 简单工厂模式
例:图形工厂
使用简单工厂模式设计一个可以创建不同几何形状(Shape)的绘图工具类,如可创建圆形(Circle)、矩形(Rectangle)和三角形(Triangle)对象,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个UnsupportedShapeException异常,设计类图并编程实现。
类图:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式1
{
class Program
{
static void Main(string[] args)
{
Shape test = null;
test = ShapeFactory.getshape("Circle");
test.draw();
test.erase();
test = ShapeFactory.getshape("Rectangle");
test.draw();
test.erase();
test = ShapeFactory.getshape("Triangle");
test.draw();
test.erase();
test = ShapeFactory.getshape("other");
test.draw();
test.erase(); }
}
abstract class Shape//图形工厂
{
public abstract void draw();
public abstract void erase();
}
class Circle:Shape
{
public override void draw()
{
Console.WriteLine("创建新的 Circle");
}
public override void erase()
{
Console.WriteLine("擦除 Circle");
}
}
class Rectangle : Shape
{
public override void draw()
{
Console.WriteLine("创建新的 Rectangle");
}
public override void erase()
{
Console.WriteLine("擦除 Rectangle");
}
}
class Triangle : Shape
{
public override void draw()
{
Console.WriteLine("创建新的 Triangle");
}
public override void erase()
{
Console.WriteLine("擦除 Triangle");
}
}
class ShapeFactory//图形工厂类
{
public static Shape getshape(string agr)
{
Shape s = null;
if(agr.Equals("Circle"))
{
s = new Circle();
Console.WriteLine("初始化 Circle");
}
else if (agr.Equals("Rectangle"))
{
s = new Rectangle();
Console.WriteLine("初始化 Rectangle");
}
else if (agr.Equals("Triangle"))
{
s = new Triangle();
Console.WriteLine("初始化 Triangle");
}
else
{
throw new UnsupportedShapeException("type is not found");
}
return s;
}
}
class UnsupportedShapeException:ApplicationException
{
public UnsupportedShapeException():base()
{
}
public UnsupportedShapeException(string message)
: base(message)
{
}
public UnsupportedShapeException(string message,Exception innerException)
: base(message,innerException)
{
}
}
}
- 工厂方法模式
例:图片读取器
某系统设计一个图片读取器(ImageReader),用来读取各种不同类型的图片格式,例如GIF图片读取器(GifReader)用于读取GIF格式的图片、 JPG图片读取器(JpgReader)用于读取JPG格式的图片,现使用工厂方法模式设计该系统类图并编程实现。
类图:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式上机1图片读取器
{
class Program
{
static void Main(string[] args)
{
Facatory facatory = new JpgFacatory();
facatory.createReader();
Facatory facatory1 = new GifFacatory();
facatory1.createReader();
Console.ReadKey();
}
}
public interface ImageReader//抽象图像读取器
{
void imageRead();
}
public interface Facatory//抽象工厂接口
{
void createReader();
}
class GifReader : ImageReader
{
public void imageRead()
{
Console.WriteLine("读取Gif图片类");
}
}
class JpgReader : ImageReader
{
public void imageRead()
{
Console.WriteLine("read jpg pictures");
}
}
class JpgFacatory : Facatory//具体工厂类
{
public void createReader()
{
ImageReader s = null;
s = new JpgReader();
s.imageRead();
Console.WriteLine("create JpgReader");
}
}
class GifFacatory : Facatory//具体工厂类
{
public void createReader()
{
ImageReader s = null;
s = new GifReader();
s.imageRead();
Console.WriteLine("create gifreader");
}
}
}
- 抽象工厂模式
例:电器工厂
一个电器工厂可以产生多种类型的电器,如海尔工厂可以生产海尔电视机、海尔空调等,TCL工厂可以生产TCL电视机、TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成了一个产品等级结构,现使用抽象工厂模式模拟该场景,设计类图并编程实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式电器工厂
{
class Program
{
static void Main(string[] args)
{
Factory haierfactory;
haierfactory = new HaierFactory();
haierfactory.CreateProduct();
Factory tclfactory;
tclfactory = new TCLFactory();
tclfactory.CreateProduct();
Console.ReadKey();
}
}
public interface TV {
void CreateTV();
}
//HaierTV类:
public class HaierTV : TV
{
public void CreateTV() {
Console.WriteLine("创建海尔TV");
}
}
//TCLTV类:
public class TCLTV : TV
{
public void CreateTV() {
Console.WriteLine("生产TCL电视机");
}
}
public interface Air//抽象空调
{
void CreateAir();
}
//HaierAir类:
public class HaierAir : Air
{
public void CreateAir() {
Console.WriteLine("生产海尔空调");
}
}
//TCLAir类:
public class TCLAir : Air{
public void CreateAir() {
Console.WriteLine("生产TCL空调");
}
}
//TV接口:
interface Factory//抽象工厂类
{
void CreateProduct();
}
//HaierFactory类:
public class HaierFactory : Factory{
public void CreateProduct() {
Air test1;
test1=new HaierAir();
test1.CreateAir();
TV test2;
test2=new HaierTV();
test2.CreateTV();
}
}
//TCLFactory类:
public class TCLFactory : Factory
{
public void CreateProduct() {
Air test1;
test1=(Air) new TCLAir();
test1.CreateAir();
TV test2;
test2=new TCLTV();
test2.CreateTV();
}
}
}
有错误的地方还请指正!