zoukankan      html  css  js  c++  java
  • 设计模式 单件 & 原型

    Design Pattern - Singleton & Prototype

    实现了单件模式的的Client, 它自身只有一个示例, 用Instance()方法得到惟一的实例

    public class Client
    {
        
    static private Hashtable ht = new Hashtable();
        
    static protected Client c = null;

        
    protected Client()
        
    {
        }


        
    public static Client Instance()
        
    {
            
    if(c == null)
                c 
    = new Client();
            
    return c;
        }


        
    public void Register(String name, CloneHuman ch)
        
    {
            ht.Add(name, ch);
        }

            
    public CloneHuman BuildCloneHuman(String name)
        
    {
            CloneHuman ch 
    = (CloneHuman)ht[name];
            
    return ch.CreateClone();
        }

    }

    克隆人的类, 以及分别它的子类克隆的男人和女人
    public class CloneHuman
    {
        
    public virtual CloneHuman CreateClone()
        
    {
            
    return null;
        }


        
    public void Show()
        
    {
            String s 
    = this.GetType().ToString();
            Console.WriteLine(s.Substring(s.LastIndexOf(
    ".")+1));
        }

    }
    public class CloneMale : CloneHuman
    {
        
    public override CloneHuman CreateClone()
        
    {
            
    return (CloneHuman)this.MemberwiseClone();
        }

    }

    public class CloneFemale : CloneHuman
    {
        
    public override CloneHuman CreateClone()
        
    {
            
    return (CloneHuman)this.MemberwiseClone();
        }

    }

    测试程序

    public static void Main()
    {
        Client c 
    = Client.Instance();
        CloneMale cm 
    = new CloneMale();
        CloneFemale cf 
    = new CloneFemale();
        c.Register(
    "CloneMale", cm);
        c.Register(
    "CloneFemale", cf);
        
    for(Int32 i=0; i<10; i++)
        
    {
            String name 
    = (i%2==0)?"CloneMale":"CloneFemale";
            CloneHuman ch 
    = c.BuildCloneHuman(name);
            ch.Show();
        }

        Console.ReadLine();
    }
    Prototype Demo
  • 相关阅读:
    一提黄金肯定就是西方的货币史
    封装QtCore(在非Qt项目里使用QString,QJson,QFileInfo,QFile等类)
    Qt 自定义事件(三种方法:继承QEvent,然后Send Post就都可以了,也可以覆盖customEvent函数,也可覆盖event()函数)
    MAC 设置环境变量path的几种方法
    深入Qt 学习 -- 反射机制(比较简单清楚)
    排序
    寄存器,cache、伙伴系统、内存碎片、段式页式存储管理
    NET Core项目
    消息队列
    RedisHelper
  • 原文地址:https://www.cnblogs.com/Dabay/p/364762.html
Copyright © 2011-2022 走看看