`

设计模式学习笔记五——Prototype模式

    博客分类:
  • .Net
阅读更多

动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。某些结构复杂对象面临着剧烈变化,但拥有比较稳定一致的接口,如何隔离出这些易变对象,使客户程序不随之改变?

场景: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;
        }

    }

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics