概述
初探抽象工厂与建造者模式之间结合
本文适合初学设计模式的人,第一次写文章,别拿拖鞋打我脸,我也是刚学,有什么误区希望大家给我指点一二. 开始看设计模式头有点大,不知道有什么用.建议新人不要懒,看不懂没有关系,多把代码打俩遍.前几天刚刚学习抽象工厂模式,单件模式与建造者模式.看完Terrylee写的设计模式中让我感觉自已的编程是那么弱,大牛就是大牛.
抽象工厂模式好处
往往在设计中好移植,可以在数据库的封装提供上方便.类与类之间没有直接的联系,而是渐接的进行联系.
例如:在自已写的程序中,往往要SQLserver与Oracle之间都能运行.这就用到了抽象工厂模式.
建造者模式好处
在设计中有时要创建一个复杂的对象,往往又是由子对象组成的.
例如:我们把电脑看成一个复杂的对象,电脑里面又有CPU,内存,硬盘,等对象.这样才能组装成电脑.
在抽象工厂和建造者模式结合时,抽象工厂负责的是我是要组装笔记本,还是台式机.二者可以随意.
下面举个生活中的例子,炒菜,对于我来说只会吃,丢人中...嘎.
1.炒菜时我们先要准备好材料才可以进行吧,那么我们建立个抽象类.
public abstract class abBuilderFood
{
/// <summary>
/// 猪肉
/// </summary>
public abstract void pork();
/// <summary>
/// 鱼
/// </summary>
public abstract void fish();
/// <summary>
/// 鸡蛋
/// </summary>
public abstract void egg();
/// <summary>
/// 西红柿
/// </summary>
public abstract void tomato();
/// <summary>
/// 土豆
/// </summary>
public abstract void murphy();
public abstract Food GetFood();
}
2.下面建立菜式混合类,也就是把什么菜和什么菜结合.组成一道菜
public class Food
{
ArrayList Food_name = new ArrayList();
string Food_strname = "";
public void Add(string strname)
{
Food_name.Add(strname);
}
public string show()
{
for (int i = 0; i < Food_name.Count; i++)
{
Food_strname = Food_strname + Food_name[i] + "|";
}
return Food_strname;
}
}
3. 下面要我们要知道都准备了哪些菜,这样子才好什么菜和什么菜进行搭配.继承抽象的菜
public class BuilderFood : abBuilderFood
{
Food Foodname = new Food();
public override void egg()
{
Foodname.Add("鸡蛋");
}
public override void fish()
{
Foodname.Add("鱼");
}
public override void murphy()
{
Foodname.Add("土豆");
}
public override void pork()
{
Foodname.Add("猪肉");
}
public override void tomato()
{
Foodname.Add("西红柿");
}
public override Food GetFood()
{
return Foodname;
}
}
4.下面就是抽象工厂要完成的工作了,告诉我们今天是吃妈妈做的菜,还是爸爸做的菜.
public abstract class abstrfactory
{
public static abstrfactory instance;
public static abstrfactory Getinstance()
{
string factoryName = System.Configuration.ConfigurationSettings.AppSettings["factoryName"];
if (instance == null)
//这里是跟据app.config进行设置的
instance = (abstrfactory)Assembly.Load("factory_Builder").CreateInstance(factoryName);
return instance;
}
public abstract void adept(abBuilderFood foodname);
}
5.我们就快可以吃到好吃的了,加油吧..下面内容很简单了.就是要知道爸,妈到底会做什么样的菜.
public class father : abstrfactory
{
public override void adept(abBuilderFood foodname)
{
//西红柿炒蛋
foodname.egg();
foodname.tomato();
}
}
public class mater : abstrfactory
{
public override void adept(abBuilderFood foodname)
{
//土豆烧肉
foodname.murphy();
foodname.pork();
}
}
6.下面是App.config配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="factoryName" value="factory_Builder.mater"></add>
</appSettings>
</configuration>
7.下面是主程序,WindowsApplication程序,在winform下面增加一个Lable.
Form_Load事件中加入如下代码
abBuilderFood instance = new BuilderFood();
Food myFood = instance.GetFood();
abstrfactory.Getinstance().adept(instance);
label1.Text = myFood .show();
文中运用了俩个单件模式,我想是不对的,大家帮忙看看怎么修改.
最后
以上就是健壮大白为你收集整理的抽象工厂与建造设计模式结合的全部内容,希望文章能够帮你解决抽象工厂与建造设计模式结合所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复