抽象工厂模式
通用原则:在可能的情况下尽量使用基类的方法
与简单抽象工厂的区别:
1.Factory用于创建一种类型的产品,而AbstractFactory用于创建产品族
抽象工厂的国种角色:
1.抽象工厂(Abstract Factory). 担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创立对象的工厂类必须实现这个接口,或继承这个类。
2.具体工厂(Concrete Factory). 这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
3.抽象产品(Abstract Product). 担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
4.具体产品(Concrete Factory). 抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。
抽象工厂模式结构图

以建房子为例,建造不同风格的房子. 中国式的,西方式的...
1.抽象产品
//抽象产品
public abstract class wall
{
}
public abstract class window
{
}
public abstract class door
{
}
//抽象工厂
public abstract class builderAbstractFactory
{
public abstract wall CreateWall();
public abstract window CreateWindow();
public abstract door CreateDoor();
}3.实际产品
//具体产品
public class chinaWall:wall //继承抽象产品
{
}
public class chinaWindow:window
{
}
public class chinaDoor:door
{
}
4.具体工厂
public class chinaBuilderFactory : builderAbstractFactory
{
public override wall CreateWall()
{
return new chinaWall();
}
public override window CreateWindow()
{
return new chinaWindow();
}
public override door CreateDoor()
{
return new chinaDoor();
}
}5客户端程序
//无论使用哪种风格这里永远不变
class Client
{
//抽象工厂对象
builderAbstractFactory builder;
//抽象产品对象
road ro;
door dor;
window win;
//使用哪个具体工厂的对象,这样达到不改变的目的
public Client(builderAbstractFactory builder)
{
this.builder = builder;
}
public void ready()
{
ro = builder.CreateWall();
dor = builder.CreateDoor();
win = builder.CreateWindow();
}
}5.调用客户端程序
//如果有改变,只须传入对象里new不同的具体工厂对象
Client cl = new Client( new chinaBuilderFactory());
cl.ready();
与简单抽象工厂的区别:
1.Factory用于创建一种类型的产品,而AbstractFactory用于创建产品族
抽象工厂的国种角色:
1.抽象工厂(Abstract Factory). 担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创立对象的工厂类必须实现这个接口,或继承这个类。
2.具体工厂(Concrete Factory). 这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
3.抽象产品(Abstract Product). 担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
4.具体产品(Concrete Factory). 抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。
抽象工厂模式结构图

以建房子为例,建造不同风格的房子. 中国式的,西方式的...
1.抽象产品













2.抽象工厂




















4.具体工厂







































【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端