.net 设计模式之原型模式

其他环境
¥25.00

请提供原型模式的详细说明和C#实现demo

最佳答案

概述

    在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适。那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化?

意图

    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

生活中的例子

    Prototype模式使用原型实例指定创建对象的种类。新产品的原型通常是先于全部产品建立的,这样的原型是被动的,并不参与复制它自己。一个细胞的有丝分裂,产生两个同样的细胞,是一个扮演主动角色复制自己原型的例子,这演示了原型模式。一个细胞分裂,产生两个同样基因型的细胞。换句话说,细胞克隆了自己。

 

原型模式解说

    我们考虑这样一个场景,假定我们要开发一个调色板,用户单击调色板上任一个方块,将会返回一个对应的颜色的实例,下面我们看看如何通过原型模式来达到系统动态加载具体产品的目的。

    很自然,我们利用OO的思想,把每一种颜色作为一个对象,并为他们抽象出一个公用的父类,示例代码如下:

public abstract class Color
{
    public abstract void Display();
}
public class RedColor:Color
{
    public override void Display()
    {
        Console.WriteLine("Red's RGB Values are:255,0,0");
    }
}
public class GreenColor:Color
{
    public override void Display()
    {
        Console.WriteLine("Green's RGB Values are:0,255,0");
    }
}

    客户程序需要某一种颜色的时候,只需要创建对应的具体类的实例就可以了。但是这样我们并没有达到封装变化点的目的,也许你会说,可以使用工厂方法模式,为每一个具体子类定义一个与其等级平行的工厂类,那么好,看一下实现:

public abstract class ColorFactory
{
    public abstract Color Create();
}
public class RedFactory:ColorFactory
{
    public override Color Create()
    {
        return new RedColor();
    }
}
public class Gree
                        

Yanne T2 被采纳率86%
2020-12-04 19:41
打赏 0 0
页面统计
366 访问
0 帮助
0.00 打赏

hierror 2019 © hierror.com 京ICP备13026190号-1

通知消息
  • 暂无任何消息