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

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号