JAVA设计模式
1.创建模式之工厂模式
工厂模式参考的是现实生产环境的工厂,不知道你是否在深圳的电子厂打工过,如果有这样的经历你就会很好理解。在工厂里是按产品线划分的,在每个产品的流水线上工人们各司其职,将一个个零部件组装起来成为最终产品。就拿我之前呆过的工厂来说,在哪里分了耳机产品线,音响产品线等。不瞎扯了,上代码。
1.1静态工厂模式
interface Product {}
class Headset implements Product {}
class Speakerbox implements Product {}
public class 3nodFactory
{
//工厂一般不用实例化,所以定义私有构造方法
private 3nodFactory(){}
//定义工厂不同产线的功能方法
public static Product getHeadset(){}
public static Product getSpeakerbox(){}
}
//客户端调用的时候根据客户需求获取不同产品
public class Client
{
public Product getProduct(String type)
{
Product product = null;
if(type.equals("speakerbox"))
{
product = 3nodFactory.getSpeakerbox();
}
else if(type.equals("headset"))
{
product = 3nodFactory.getHeadset();
}
return product;
}
}
----------
静态工厂模式实现简单,但是不便于扩展,如果工厂业务扩展新增加了产品线,那么我们就需要修改现有的工厂类方法,这样就违背了Open close principle(开闭原则),所以就产生了下面的抽象工厂模式。
1.2抽象工厂模式
//定义产品线接口
interface ProductLine { Product get() }
public SpeakerboxFactory implements ProductLine
{
public Product get()
{
return new Speakerbox();
}
}
public HeadsetFactory implements ProductLine
{
public Product get()
{
return new Headset();
}
}
public class 3nodFactory
{
public Product clientGetProduct(String type)
{
Product product = null;
if(type.equals("speakerbox"))
{
product = new SpeakerboxFactory().get();
}
else if(type.equals("headset"))
{
product = new HeadsetFactory().get();
}
return product;
}
}
----------
这就是最接近现实工厂的模型了,不同产线负责生产产品,客户找公司下单。公司的扩展也只需要增加新的产品线,不用修改原有代码。