设计模式之创建型模式---抽象工厂模式

抽象工厂模式(Abstract Factory)
上文讲到的工厂模式会有一个模式本身带有的客观问题,即所有实例的创建都必须依赖一个工厂类。这样在某种程度上是有背设计原则中的开闭原则。当业务需求发生改变时,如果想要拓展实例的创建,就必须对工厂类进行修改。所以,抽象工厂模式就应用而生了,通过创建多个工厂类,来提高程序的拓展性。这次我们来举例“鸟”,鸟都有飞行的行为,我们先创建飞行接口:

  1. public interface Fly{
  2. public void FlyBehavior();  
    
  3. }
    接着实现两个类,大鸟和小鸟:
  4. public class BigBird implements Fly{
  5. @Override  
    
  6. public void FlyTime() {  
    
  7.     System.out.println("i can fly three hours!");  
    
  8. }  
    
  9. }
  10. public class SmallBird implements Fly{
  11. @Override  
    
  12. public void FlyTime() {  
    
  13.     System.out.println("i can fly an hour!");  
    
  14. }  
    
  15. }
    然后我们先提供一个接口,接口中创建一个返回类型为飞行接口的方法,用于创建对应的鸟类型:
  16. public interface Producer{
  17. public Fly createBird();  
    
  18. }
    最后,我们创建两种类型鸟的工厂类实现上面的接口:
  19. public class ProducerBigBirdFactory implements Producer{
  20. @Override  
    
  21. public Fly createBird(){  
    
  22.     return new BigBird ();  
    
  23. }  
    
  24. }
  25. public class ProducerSmallBirdFactory implements Producer{
  26. @Override  
    
  27. public Fly createBird() {  
    
  28.     return new SmallBird ();  
    
  29. }  
    
  30. }

测试类:

  1. public class Test {
  2. public static void main(String[] args) {  
    
  3.      //创建大鸟工厂
    
  4.      Producer producer= new ProducerBigBirdFactory ();  
    
  5.      BigBird bigBird= producer.createBird();  
    
  6.      bigBird.FlyTime();  
    
  7.       //创建小鸟工厂
    
  8.       Producer producer1= new ProducerSmallBirdFactory ();  
    
  9.    SmallBird smallBird= producer1.createBird();  
    
  10.     smallBird.FlyTime();  
    
  11. }  
    
  12. }
    控制台打印:
    i can fly three hours!
    i can fly an hour!
    通过上述示例,我们就可以创建更多的鸟类型了,而不用去修改已有的稳定生产的工厂类了。只需要实现Fly接口,创建新的鸟品种,再接着实现Producer接口,创建生产新品种鸟的工厂类即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值