JAVA简单工厂模式

时间:2022-09-08 19:06:56

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图

非工厂模式: JAVA简单工厂模式
简单工厂模式:
JAVA简单工厂模式

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

总结不好,希望吐槽!