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

  

 

posted @ 2022-09-17 23:19  ®Geovin Du Dream Park™  阅读(25)  评论(0)    收藏  举报