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

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

结构

代码实现

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;
        }
    }
}

转载于:https://www.cnblogs.com/Charly/archive/2007/06/06/773482.html

设计模式学习笔记五——Prototype模式相关推荐

  1. 设计模式学习笔记——原型(Prototype)框架

    设计模式学习笔记--原型(Prototype)框架 @(设计模式)[设计模式, 原型模式, prototype] 设计模式学习笔记原型Prototype框架 基本介绍 原型案例 类图 实现代码 Pro ...

  2. 设计模式学习笔记——解释器(Interpreter)模式

    设计模式学习笔记--解释器(Interpreter)模式 @(设计模式)[设计模式, 解释器模式, Interpreter] 设计模式学习笔记解释器Interpreter模式 基本介绍 解释器案例 类 ...

  3. 设计模式学习笔记——命令(Command)模式

    设计模式学习笔记--命令(Command)模式 @(设计模式)[设计模式, 命令模式, command] 设计模式学习笔记命令Command模式 基本介绍 命令案例 类图 实现代码 Command接口 ...

  4. 设计模式学习笔记——代理(Proxy)模式

    设计模式学习笔记--代理(Proxy)模式 @(设计模式)[设计模式, 代理模式, proxy] 设计模式学习笔记代理Proxy模式 基本介绍 代理案例 类图 实现代码 Printable接口 Pri ...

  5. 设计模式学习笔记——状态(State)模式框架

    设计模式学习笔记--状态(State)模式框架 @(设计模式)[设计模式, 状态模式, State] 设计模式学习笔记状态State模式框架 基本介绍 状态案例 类图 实现代码 State接口 Day ...

  6. 设计模式学习笔记——备忘录(Memento)模式

    设计模式学习笔记--备忘录(Memento)模式 @(设计模式)[设计模式, 备忘录模式, memento] 设计模式学习笔记备忘录Memento模式 基本介绍 备忘录案例 类图 实现代码 Memen ...

  7. 设计模式学习笔记——观察者(Observer)模式

    设计模式学习笔记--观察者(Observer)模式 @(设计模式)[设计模式, 观察者模式, Observer] 设计模式学习笔记观察者Observer模式 基本介绍 观察者案例 类图 实现代码 Ob ...

  8. 设计模式学习笔记——外观(Facade)模式

    设计模式学习笔记--外观(Facade)模式 @(设计模式)[设计模式, 外观模式, facade] 设计模式学习笔记外观Facade模式 基本介绍 外观案例 类图 实现代码 Database类 ma ...

  9. 设计模式学习笔记——访问者(Visitor)模式

    设计模式学习笔记--访问者(Visitor)模式 @(设计模式)[设计模式, 访问者模式, visitor] 设计模式学习笔记访问者Visitor模式 基本介绍 访问者案例 类图 实现代码 Visit ...

最新文章

  1. 计算机累加器有加法器功能吗,累加器-累加器ACC的作用
  2. SQL Server相关知识
  3. python高阶函数(三分钟读懂)
  4. 记得收藏这12个爆款 Java 开源项目!【附源码】
  5. 程序猿加班到深夜,你经历过没?
  6. Unity初级坦克大战游戏实现(Battle Tank)带工程源码资源包(二)
  7. 百度移动搜索落地页体验广告白皮书3.0上线
  8. 欧姆龙OMRON CP1H  PLC与台达 DOP-B触摸屏通讯
  9. 溯光者:超简单,一文读懂显卡型号编码数字、字母怎么看,都是什么意思?
  10. RL Python练习
  11. linux下模拟键盘的几种方法
  12. 工商银行携手数美科技,赋能数字化业务高质量发展
  13. Abbirb120型工业机器人_工控产品-ABB IRB120工业机器人-IRB120
  14. 中文分词软件包的使用
  15. android开发培训大纲,华图教育-Android应用开发培训教学大纲
  16. 闪电搜索算法,Lightning search algorithm
  17. 内置数据库H2和内置Redis(测试结果来啦)
  18. 蓝桥杯算法训练 无聊的逗-详细注释版
  19. 源码学习-net/http
  20. 四川翌加:抖音视频要进入热门流量池,需经历哪几个阶段

热门文章

  1. 计算机二维全息图原理,三维信息加密如何使用计算全息进行
  2. burpsuite csrf攻击_WEB安全之CSRF
  3. linux 挂载san存储,新手看招:Linux操作系统下挂载SAN资源
  4. Linux 软件包管理器的目的是什么,Linux软件包的管理--RPM包管理器
  5. 学习笔记6-小项目-走迷宫、推箱子
  6. linux心跳包检测代码_OpenSSL心跳包越界读敏感信息泄漏漏洞
  7. leetcode512. 游戏玩法分析 II(SQL)
  8. MachineLearning(4)-核函数与再生核希尔伯特空间
  9. 《Python Cookbook 3rd》笔记(1.12):序列中出现次数最多的元素
  10. html5语句大全,html5基础语句(学习)