• Csharp: Abstract Factory Pattern


     /// <summary>
        /// Summary description for Garden.
        /// Abstract Factory Patterns
        /// geovindu,Geovin Du,涂聚文
        /// </summary>
        public class Garden
        {
            protected Plant center, shade, border;
            protected bool showCenter, showShade, showBorder;
            //select which ones to display
            public void setCenter() { showCenter = true; }
            public void setBorder() { showBorder = true; }
            public void setShade() { showShade = true; }
            /// <summary>
            /// draw each plant
            /// </summary>
            /// <param name="g"></param>
            public void draw(Graphics g)
            {
                if (showCenter) center.draw(g, 100, 100);
                if (showShade) shade.draw(g, 10, 50);
                if (showBorder) border.draw(g, 50, 150);
            }
        }
    

      

     /// <summary>
        /// Summary description for Plant.
        /// Abstract Factory Patterns
        /// geovindu,Geovin Du,涂聚文
        /// </summary>
        public class Plant
        {
            private string name;
            private Brush br;
            private Font font;
            /// <summary>
            /// 
            /// </summary>
            /// <param name="pname"></param>
            public Plant(string pname)
            {
                name = pname;     //save name
                font = new Font("Arial", 12);
                br = new SolidBrush(Color.Black);
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="g"></param>
            /// <param name="x"></param>
            /// <param name="y"></param>
            public void draw(Graphics g, int x, int y)
            {
                g.DrawString(name, font, br, x, y);
            }
        }
    

      

        /// <summary>
        /// Summary description for AnnualGarden.
        /// Abstract Factory Patterns
        /// geovindu,Geovin Du,涂聚文
        /// </summary>
        public class AnnualGarden : Garden
        {
    
            /// <summary>
            /// 
            /// </summary>
            public AnnualGarden()
            {
                shade = new Plant("Coleus");
                border = new Plant("Alyssum");
                center = new Plant("Marigold");
            }
        }
    

      

        /// <summary>
        /// Summary description for VeggieGarden.
        /// Abstract Factory Patterns
        /// geovindu,Geovin Du,涂聚文
        /// </summary>
        public class VeggieGarden : Garden
        {
            public VeggieGarden()
            {
                shade = new Plant("Broccoli");
                border = new Plant("Peas");
                center = new Plant("Corn");
            }
        }
    

      

        /// <summary>
        /// Summary description for PerennialGarden.
        /// Abstract Factory Patterns
        /// geovindu,Geovin Du,涂聚文
        /// </summary>
        public class PerennialGarden : Garden
        {
            public PerennialGarden()
            {
                shade = new Plant("Astilbe");
                border = new Plant("Dicentrum");
                center = new Plant("Sedum");
            }
        }
    

      

    /// <summary>
        /// Abstract Factory Patterns
        /// geovindu,Geovin Du,涂聚文
        /// </summary>
        public partial class GdPic : System.Windows.Forms.PictureBox 
        {
    
     
            private Brush br;
            private Garden gden;
    
            /// <summary>
            /// 
            /// </summary>
            private void init()
            {
                br = new SolidBrush(Color.LightGray);
            }
            /// <summary>
            /// 
            /// </summary>
            public GdPic()
            {
                InitializeComponent();
                init();
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="garden"></param>
            public void setGarden(Garden garden)
            {
                gden = garden;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="pe"></param>
            protected override void OnPaint(PaintEventArgs pe)
            {
                Graphics g = pe.Graphics;
                g.FillEllipse(br, 5, 5, 100, 100);
                if (gden != null)
                    gden.draw(g);
            }
    
      
        }
    

     窗體調用:

     /// <summary>
        /// Abstract Factory Patterns
        /// geovindu,Geovin Du,涂聚文
        /// </summary>
        public partial class AbstractFactoryForm : Form
        {
    
            private Garden garden;
            /// <summary>
            /// 
            /// </summary>
            public AbstractFactoryForm()
            {
                InitializeComponent();
              
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void AbstractFactoryForm_Load(object sender, EventArgs e)
            {
    
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void ckCenter_CheckedChanged(object sender, EventArgs e)
            {
                garden.setCenter();
                gdPic1.Refresh();
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void ckBorder_CheckedChanged(object sender, EventArgs e)
            {
                garden.setBorder();
                gdPic1.Refresh();
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void ckShade_CheckedChanged(object sender, EventArgs e)
            {
                garden.setShade();
                gdPic1.Refresh();
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void opAnnual_CheckedChanged(object sender, EventArgs e)
            {
                setGarden(new AnnualGarden());
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void opVegetable_CheckedChanged(object sender, EventArgs e)
            {
                setGarden(new VeggieGarden());
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void opPerennial_CheckedChanged(object sender, EventArgs e)
            {
                setGarden(new PerennialGarden());
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="gd"></param>
            private void setGarden(Garden gd)
            {
                garden = gd;			//save current garden
                gdPic1.setGarden(gd);	//tell picture bos
                gdPic1.Refresh();		//repaint it
                ckCenter.Checked = false;	//clear all
                ckBorder.Checked = false;	//check
                ckShade.Checked = false;	//boxes
            }
        }
    

      

  • 相关阅读:
    APPIUM Android 定位方式
    SQL Server 根据存储过程的结果集创建临时表
    Ubuntu18.04 设置开机自启动服务
    ubuntu-18.04 (各版本镜像下载) 及的环境初始化配置
    CentOS 7 编译安装PHP5.6.31
    Centos7 编译安装 MySQL 5.5.62
    Windows 2008 R2 远程桌面连接记录(客户端IP)
    CentOS crontab定时任务
    CentOS 7 安装MySql 5.5.60
    SQL Server 数据库错误码解释
  • 原文地址:https://www.cnblogs.com/geovindu/p/16703931.html
Copyright © 2020-2023  润新知