引言
网上有很多介绍设计模式系列的优秀文章,看懂不一定是真懂,能写出来,说出个1、2、3点才算是真的懂了,如果能灵活的应用到工作中才算是真的熟练。
1、模式场景
我们上学的时候经常去文具店买笔,现在需要买铅笔、钢笔、彩笔,有一种选择是分别去铅笔专卖店,钢笔专卖店,彩笔专卖店买到对应的笔。
2、模式结构
1、抽象产品类:Product(对应模式场景中的笔)
抽象产品是所有实例公有的父类接口。
2、具体产品类:ConcreteProduct(对应模式场景中具体的铅笔、钢笔、彩笔等)
实现抽象产品类的具体产品类实例。
3、抽象工厂类:Factory(对应模式场景中的卖笔的专卖店)
抽象的定义了构造抽象产品的类型。
4、具体工厂类:ConcreteFactory(对应模式场景中铅笔专卖店)
实现抽象工厂类,构造具体产品类实例。
3、示例代码
3.1、抽象产品
public interface Pen {
void write();
}
3.2、具体产品
public class Pencil implements Pen {
@Override
public void write() {
System.out.println("write by pencil ...");
}
}
3.3、抽象工厂
public interface PenFactory {
Pen createPen();
}
3.4、具体工厂
public class PencilFactory implements PenFactory {
@Override
public Pen createPen() {
return new Pencil();
}
}
4、测试类
public class PenTest {
public static void main(String[] args) throws Exception {
PenFactory penFactory = new PencilFactory();
Pen pencil = penFactory.createPen();
pencil.write();
}
}
控制台输出:
write by pencil ...
4、模式优点
- 工厂模式中,用户只需关心对应产品的工厂实现类就行,无需知道具体产品类类名。
- 工厂模式中,工厂类和产品类是基于多态性设计,工厂可以自主的选择创建何种产品对象。
- 工厂模式中,加入新的产品时,不需要修改原来代码,只需要添加新的产品和新的工厂实现类,扩展性强。
5、模式缺点
- 系统中类的数量,随着产品的数量成对的增加,增加了系统的复杂性,在编译和运行时,增加了系统的开销。
结束语
工厂模式中包含四个角色,使用了面向对象的多态性,保留了简单工厂的优点,克服了简单工厂的缺点,系统有良好的灵活性和扩展性,下一篇将介绍:设计模式——建造者模式。