工厂方法模式
2019-06-27 本文已影响0人
Loistein
开闭原则
软件实体对外扩展开放,对修改关闭
- 分析:Windows 的主题是桌面背景图片、窗口颜色和声音等元素的组合。用户可以根据自己的喜爱更换自己的桌面主题,也可以从网上下载新的主题。这些主题有共同的特点,可以为其定义一个抽象类(Abstract Subject),而每个具体的主题(Specific Subject)是其子类。用户窗体可以根据需要选择或者增加新的主题,而不需要修改原代码,所以它是满足开闭原则
工厂方法模式
- 主要优点
用户只需要知道具体工厂名称就可以得到所要的产品,无须知道产品的具体创建过程
在系统增加新的产品时只需添加产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则 - 缺点
每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,增加了系统的复杂度 - 模式的结构:
抽象工厂
具体工厂
抽象产品
具体产品 - 利用了多态
参考:http://c.biancheng.net/view/1348.html
//抽象产品:提供了产品的接口
interface Product
{
public void show();
}
//具体产品1:实现抽象产品中的抽象方法
class ConcreteProduct1 implements Product
{
public void show()
{
System.out.println("具体产品1显示...");
}
}
//具体产品2:实现抽象产品中的抽象方法
class ConcreteProduct2 implements Product
{
public void show()
{
System.out.println("具体产品2显示...");
}
}
//抽象工厂:提供了厂品的生成方法
interface AbstractFactory
{
public Product newProduct();
}
//具体工厂1:实现了厂品的生成方法
class ConcreteFactory1 implements AbstractFactory
{
public Product newProduct()
{
System.out.println("具体工厂1生成-->具体产品1...");
return new ConcreteProduct1();
}
}
//具体工厂2:实现了厂品的生成方法
class ConcreteFactory2 implements AbstractFactory
{
public Product newProduct()
{
System.out.println("具体工厂2生成-->具体产品2...");
return new ConcreteProduct2();
}
}