概述
目录
工厂模式
引言
定义
工厂模式结构图
实例
实例描述
代码实现
工厂模式扩展
静态工厂方法(简单工厂模式)
总结
模式优点
模式缺点
工厂模式
引言
在面向对象的编程中,创建一个对象(实例化)主要使用new关键字,工厂模式将类的使用和创建解耦。用户要使用一个类的时候,无需关心该类的具体创建过程,甚至无需知道该类类名,只需要通过工厂类返回需要的实例。就好比我们想吃香蕉,不需要知道香蕉是怎么产生的,不需要我们自己动手种树收获,只需要去水果店买就行(我们可能根本不知道水果店的香蕉是怎么来的)。
定义
英文定义:"Define an interface for creating an object. but let subclasses decide which class to instantiate.Factory Method let a class defer instantiation to subclass."。
在工厂模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,将产品类的实例化操作延迟到工厂子类中去完成。
工厂模式重要等级★★★★★ 工厂模式难度等级★★☆☆☆
工厂模式结构图
工厂模式包含以下角色
1.Factory (抽象产品类)
2.ConcreteFactory (具体产品)
3. Product (抽象产品)
4. ConcreteProduct (具体产品)
实例
实例描述
使用工厂模式创建不同品牌的手机,该实例类图如下:
代码实现
1.Phone 抽象手机类,设计为接口,定义了Play方法。
interface Phone
{
void Play();
}
2.PhoneFactory 手机工厂类,定义工厂方法返回抽象手机
interface PhoneFactory
{
Phone CreatePhone();
}
3.IPhoneX 和HUAWEI具体手机,实现Phone接口
class IphoneX : Phone
{
public void Play()
{
Console.WriteLine("This is IphoneX");
}
}
class HUAWEI : Phone
{
public void Play()
{
Console.WriteLine("This is HUAWEI.");
}
}
4.具体工厂类,实现PhoneFactory接口,返回具体的手机
class IphoneFactory : PhoneFactory
{
public Phone CreatePhone()
{
return new IphoneX();
}
}
class HUAWEIFactory : PhoneFactory
{
public Phone CreatePhone()
{
return new HUAWEI();
}
}
5.测试类,只需要面向Phone和PhoneFactory接口编程。
class Program
{
static void Main(string[] args)
{
PhoneFactory factory;
Phone phone;
//使用苹果工厂生产苹果手机
factory = new IphoneFactory();
phone = factory.CreatePhone();
phone.Play();
//使用华为工厂生产华为手机
factory = new HUAWEIFactory();
phone = factory.CreatePhone();
phone.Play();
Console.ReadKey();
}
}
6.运行结果
工厂模式扩展
静态工厂方法(简单工厂模式)
如果工厂等级结构中只有一个具体工厂类的话,抽象工厂就可以省略,此时,改具体工厂可以创建所有产品对象,那么改工厂的工厂方法可以定义为静态方法,此时,这种工厂模式又称为简单工厂模式。简单工厂模式类图如下。
总结
模式优点
1.在工厂模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪些具体产品将被实例化这一细节,用户只需关系所需产品对应的工厂,无需关心创建细节,甚至无需知道具体产品的类名。
2.在系统中加入新的产品时无需修改原有代码,只需要增加一对工厂和产品,完全符合开闭原则。
模式缺点
1.增加新产品时候,系统中的类将会成对增加,在一定程度上增加了系统的复杂度。
最后
以上就是老实金毛为你收集整理的工厂模式学习总结工厂模式的全部内容,希望文章能够帮你解决工厂模式学习总结工厂模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复