抽象工厂模式
来源:互联网 发布:凯撒大帝3mac 秘籍大全 编辑:程序博客网 时间:2024/05/17 09:43
抽象工厂模式:提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。{创建型模式}
抽象工厂模式以一种倾斜的方式支持增加,可以很容易的增加产品族,但是不能为增加产品等级结构提供方便。[如下图,我们可以很容易的纵向的系统,但是添加横向的控件确不易]
实现代码如下:
namespace AbstractN
{
//AbstractFactory
abstract public class ViewFactory
{
abstract public Button makeButton();
abstract public TextBox makeTextBox();
}
//ConcreteFactory1
public class WindowsView : ViewFactory
{
public override Button makeButton()
{
return new WindowsXPButton();
}
public override TextBox makeTextBox()
{
return new WindowsXPTextBox();
}
}
//ConcreteFactory2
public class UnixView : ViewFactory
{
public override Button makeButton()
{
return new UnixAixButton();
}
public override TextBox makeTextBox()
{
return new UnixAixTextBox();
}
}
//AbstractProductA
abstract public class Button
{
abstract public void ButtonName(string name);
abstract public void ButtonSize();
}
//AbstractProductB
abstract public class TextBox
{
abstract public double TextboxLen();
}
//ProductA1
public class WindowsXPButton : Button
{
public override void ButtonName(string name)
{
Console.WriteLine("Xp系统的按钮默认名:" + name);
}
public override void ButtonSize()
{
Console.WriteLine("按钮尺寸可调整!");
}
}
//ProductA2
public class UnixAixButton : Button
{
public override void ButtonName(string name)
{
Console.WriteLine("AIX系统的按钮默认名:" + name);
}
public override void ButtonSize()
{
Console.WriteLine("按钮尺寸不调整!");
}
}
//ProductB1
public class WindowsXPTextBox : TextBox
{
public override double TextboxLen()
{
return 12.9;
}
}
//ProductB2
public class UnixAixTextBox : TextBox
{
public override double TextboxLen()
{
return 19.2;
}
}
//Client端----------------------------
public class Client
{
Button button;
TextBox textbox;
public Client(ViewFactory system)
{
button = system.makeButton();
textbox = system.makeTextBox();
}
public void showAllView()
{
button.ButtonName("按钮名称");
button.ButtonSize();
Console.WriteLine(textbox.TextboxLen().ToString());
}
}
class Program
{
static void Main(string[] args)
{
ViewFactory v = new WindowsView();
Client client = new Client(v);
client.showAllView();
ViewFactory v1 = new UnixView();
Client c1 = new Client(v1);
c1.showAllView();
}
}
}
我们以后在增加/替换系统的时候,可以增加一些DLL,切换相关的引用;
但是在增加控件的时候,类库项目和Client端的变动都较大。
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- 8051f CH375 优盘---ch375.c
- PHP中采用POST方式发送数据
- lucene索引合并
- 现在的你, 凭什么翘着二郎腿, 你应该放下你的腿, 身体前倾, 时刻保持战斗姿态
- 从零开始学习jQuery (二) 万能的选择器
- 抽象工厂模式
- Cut用法 和 awk的相关区别
- Qt 自制文件浏览器并实现按照扩展名过滤
- java设计模式---观察者模式
- c中各种++的比较
- 例题7.1.1,除法
- 关于全国大学生电子设计竞赛
- UVa10098 Generating Fast, Sorted Permutation
- [MFC]选择目录对话框和选择文件对话框