设计模式之工厂模式—工厂方法模式

接着上一篇 设计模式之工厂模式—简单工厂模式 进一步学习工作方法模式;

工厂方法模式:指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化在子类中进行;

核心思想:单一职责的工厂类(JavaBookFactory),该类进行具体类的实例化(JavaBook类的实例化) ------实现------》一个总的工厂接口(BookFactory);

1、一个总的工厂接口:BookFactory

public interface BookFactory {
    Book getBookInstance();
}

2、单一职责的工厂类:JavaBookFactory

public class JavaBookFactory implements BookFactory{
    @Override
    public Book getBookInstance() {
        return new JavaBook();
    }
}

3、书籍总接口:Book   其中方法为购买书籍:buyBook();子类实现该方法进行具体的购买行为

public interface Book {
    public void buyBook();
}

4、需要实例化的类:JavaBook

public class JavaBook implements Book{
    @Override
    public void buyBook() {
        System.out.println("购买java书籍");
    }
}

5、测试:

public class MethodFactoryTest {

    public static void main(String[] args) {
        //通过new JavaBookFactory()来实例化工厂,得到JavaBookFactory实例
        BookFactory bookFactory = new JavaBookFactory();
        //实例通过调用getBookInstance()方式获取具体的实现类
        Book book = bookFactory.getBookInstance();
        book.buyBook();
    }
}

结果打印:

6、总结:这就是工厂方法模式的实现,其主要核心就是一种类型只负责该类型的类的实例化工作,很好的贴合了单一原则,工厂方法模式也被认为是抽象工厂模式的一种特殊方式,下一篇将进行抽象工厂模式的学习;

工厂方法模式:

优点在于:

       1、用户只需要关心所需产品对应的工厂,无需关心创建细节;

  2、所有的具体工厂类都具有同一抽象父类,被称为多态工厂模式;

  3、符合开闭原则,新增产品只需要添加工厂类和具体产品,无需修改代码,扩展性好;

缺点在于:  

       1、添加一个新的产品,系统都将增加一个产品类,并且增加一个产品的工厂来实现总工厂接口,导致增加了系统的复杂性,有更多的类需要编译和运行,会增加系统性能的开销;

  2、由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度;

适用于:

1、产品扩展时,不需要修改原来的代码;

2、总工厂类通过其子类来指定创建哪个对象。利用面向对象的多态性和里氏替换原则,在程序运行时子类覆盖父类对象,从而使得系统更容易扩展。

3、当创建对象时需要大量的代码时

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值