JAVA简单工厂模式

1.工厂模式概念

工厂模式是常见的创建模式之一。

定义 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式;
核心
        (1) 实例化对象,用 工厂方法代替new操作。
        (2) 将选择实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦。
特点实现了创建者和调用者的分离。
分类
        (1)简单工厂模式 (Simple Factory Pattern) :用来生产同一等级结构中的任意产品。( 对于增加新的产品,需要修改已有的代码
        (2) 工厂方法模式(Factory Method) :用于生产同一等级结构中的固定产品。( 支持增加任意产品
        (3)抽像 工厂模式(Abstract Factory) 用来生产不同产品族的全部产品。( 对于新增加的产品,无能为力,支持增加产品族
       PS:(感觉是不是有点糊涂,一脸懵逼,没关系以后总计到再回来看吧!)

2.简单工厂模式(Simple Factory Pattern)

又叫静态工厂方法模式(Static FactoryMethod Pattern)它由三种角色组成(关系见下面的类图):
     1、工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

     2、抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。

    3、具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

      简单工厂模式比较简单,这里就写一个实例吧!对比非工厂模式与简单工厂模式。奥迪(audi)和比亚迪(byd)车的跑法。哈哈,不要太认真,这里只是用来举例而已。

3.UML图

非工厂模式:

简单工厂模式:

4.非工厂模式与简单工厂模式具体比较

        (1)抽象产品

    //抽象产品角色  
    public interface Car {  
          public void run();                                                                                                                                      //更多具体逻辑.......  
    }  

        (2)具体产品

         奥迪产品:
    //具体产品奥迪  
    public class AuDi implements Car{  
        @Override  
        public void run() {  
            System.out.println("奥迪跑起来了");  
        }                                                                                                                                                           //更多具体逻辑......  
    }  
        比亚迪产品:
   //具体产品比亚迪                                                                                                                                           public class BYD implements Car{  
    @Override  
    public void run() {  
    System.out.println("比亚迪跑起来了");                                                                                                                      }
   }                                                        
    

非工厂模式测试:

    public class Client { //测试客户端  
          //创建者和调用者没有分离  
          public static void main(String[] args) {  
            Car auDi=new AuDi();//在这里创建奥迪  
            Car byD=new BYD();//在这里创建比亚迪                                                                                                                      auDi.run();  
            byD.run();                                                                                                                                               //更多具体逻辑.....  
        }  
    }  

简单工厂模式测试:在上面抽象产品角色和具体产品角色的前提下增加,工厂类角色

      (3)工厂类

    public class CarFactory{//创建者  
           //在这创造奥迪  
         public static Car CreateAoDi(){  
             return new AuDi();//返回具体的产品角色给ClientSimpleFactory  
         }  
          //在这比创造亚迪  
         public static Car CreateBYD(){  
             return new BYD();//返回具体的产品角色给ClientSimpleFactory  
         }  
    }  
       
          测试:
    public class ClientSimpleFactory {//测试客户端  
        //调用者  
      public static void main(String[] args) {  
            Car aoDi= CarFactory.CreateAoDi();  
            Car byD=CarFactory.CreateBYD();  
            //车跑  
            aoDi.run();  
            byD.run();   
          //更多具体逻辑......  
       }  
     }  

5.小结

PS:简单工厂模式分离产品的创建者和调用者,有利于软件系统结构的优化;但是由于一切逻辑都集中在一个工厂类中,导致了没有很高的内聚性,同时也违背了“开放封闭原则(OCP)”。另外,简单工厂模式的方法一般都是静态的,而静态工厂方法是无法让子类继承的,因此,简单工厂模式无法形成基于基类的继承树结构。

开放封闭原则(OCP):软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

总结不好,希望吐槽!






  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值