.NET乐园
一个梦想,一个行动…… (欢迎光临我的淘宝http://pipis.taobao.com,专营户外手电筒、头灯、营地灯、自行车灯)
动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。某些结构复杂对象面临着剧烈变化,但拥有比较稳定一致的接口,如何隔离出这些易变对象,使客户程序不随之改变?

场景:ThinkPad的主板和CPU有多种,根据系列不同,如何根据已有的硬盘和CPU生产新的主板和CPU。

结构

Prototype模式结构图


代码实现

namespace DesignPattern.Prototype
{
    
public abstract class CPU
    
{
        
public abstract CPU Clone();

        
// 打上流水线序列号之类每个克隆品不同的属性
        public abstract void DoSomething();
    }


    
public class T43CPU : CPU
    
{
        
public override CPU Clone()
        
{
            
return (CPU)this.MemberwiseClone();
        }


        
public override void DoSomething()
        
{
        }

    }


    
public class T60CPU : CPU
    
{
        
public override CPU Clone()
        
{
            
return (CPU)this.MemberwiseClone();
        }


        
public override void DoSomething()
        
{
        }

    }

}

namespace DesignPattern.Prototype
{
    
public abstract class Mainboard
    
{
        
public abstract Mainboard Clone();

        
// 打上流水线序列号之类每个克隆品不同的属性
        public abstract void DoSomething();
    }


    
public class T43Mainboard : Mainboard
    
{
        
public override Mainboard Clone()
        
{
            
return (Mainboard)this.MemberwiseClone();
        }


        
public override void DoSomething()
        
{
        }

    }


    
public class T60Mainboard : Mainboard
    
{
        
public override Mainboard Clone()
        
{
            
return (Mainboard)this.MemberwiseClone();
        }


        
public override void DoSomething()
        
{
        }

    }

}

/*
 *动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。某些结构复杂对象面临着剧烈变化,但拥有比较稳定一致的接口,如何隔离出这些易变对象,使客户程序不随之改变?
 *场景:ThinkPad的主板和CPU有多种,根据系列不同,如何根据已有的硬盘和CPU生产新的主板和CPU。
*/

namespace DesignPattern.Prototype
{
    
public class ThinkPadFactory
    
{
        
public Mainboard CreateMainboard(Mainboard mainBoard)
        
{
            Mainboard mainBoardCopy 
= mainBoard.Clone();
            mainBoardCopy.DoSomething();
            
return mainBoard;
        }


        
public CPU CreateCPU(CPU cpu)
        
{
            CPU cpuCopy 
= cpu.Clone();
            cpu.DoSomething();
            
return cpu;
        }

    }

}
posted on 2007-06-06 13:42  Charly  阅读(378)  评论(1编辑  收藏  举报