ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

工厂模式

2022-02-26 10:03:18  阅读:110  来源: 互联网

标签:name Car class 模式 工厂 new public


作用:实现了创建者和调用者分离

分类:

  • 简单工厂模式:用来生产同一等级结构中的任意产品(对于新增的产品,需要扩展已有代码)
public interface Car {
    void name();
}

//静态工厂模式
//对于增加一个新的产品,如果不修改代码就做不到
//大多数情况下就是使用这种简单工厂模式,为了满足开闭原则会付出很大的代价==》工厂方法模式
public class CarFactory {
    //方法一
    public static Car getCar(String car){
        if(car.equals("五菱"))
        {
            return new Wuling();
        }else if(car.equals("特斯拉"))
        {
            return new Tesla();
        }else
        {
            return null;
        }
    }
    //方法二
    public static Car getDazhong(){
        return new Dazhong();
    }
}
public class Tesla implements Car{
    @Override
    public void name() {
        System.out.println("特斯拉");
    }
}
public class Wuling implements Car{
    @Override
    public void name() {
        System.out.println("五菱宏光");
    }
}
public class Consumer {
    public static void main(String[] args) {
       /* 原始方式创建
        需要知道接口,所有的实现类
        Car car=new Wuling();
        Car car1=new Tesla();
        car.name();
        car1.name();*/
        //使用工厂创建
        Car car=CarFactory.getCar("五菱");
        Car car1=CarFactory.getCar("特斯拉");
        car.name();
        car1.name();
    }
}

  • 工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)
public interface Car {
    void name();
}

//工厂方法模式
//随时动态扩展,满足开闭原则,但是每多一个产品就会多一个扩展类
public interface CarFactory {
    Car getCar();
}
//结构复杂度
/* simple
* 代码复杂度
* simple
* 编程复杂度
* simple
* 管理复杂度
* simple*/

//根据设计原则:应该使用工厂方法模式
//根据实际业务:应该使用简单工厂模式
public class Mobai implements Car{
    @Override
    public void name() {
        System.out.println("摩拜单车");
    }
}
public class MobaiFactory implements CarFactory{
    @Override
    public Car getCar() {
        return new Mobai();
    }
}

public class Tesla implements Car {
    @Override
    public void name() {
        System.out.println("特斯拉");
    }
}
public class TeslaFactory implements CarFactory{
    @Override
    public Car getCar() {
        return new Tesla();
    }
}

public class Wuling implements Car {
    @Override
    public void name() {
        System.out.println("五菱宏光");
    }
}
public class Wuling implements Car {
    @Override
    public void name() {
        System.out.println("五菱宏光");
    }
}

public class Consumer {
    public static void main(String[] args) {
        Car car1=new WulingFactory().getCar();
        Car car2=new TeslaFactory().getCar();
        Car car3=new MobaiFactory().getCar();
        car1.name();
        car2.name();
        car3.name();
    }
}

  • 抽象工厂模式:围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂(关注产品等级+产品族),当产品更加稳定时会更有效率
    不增加具体的产品,但是可以增加产品族(生产厂商)

核心本质:

  • 实例化对象不适用new,用工厂方法代替
  • 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。

总结:

  • 简单工厂模式:虽然不符合设计原则,但实际使用最多
  • 工厂方法模式:不修改已有类的前提下,通过增加新的工厂类实现扩展(符合设计原则)
  • 抽象工厂模式:不可以增加产品但是可以增加产品族

应用:

  1. JDK中的Calendar的getInstance方法
  2. JDBC中的Connection对象的获取
  3. Spring中IOC容器创建管理bean对象
  4. 反射中Class对象的newInsetance方法

标签:name,Car,class,模式,工厂,new,public
来源: https://www.cnblogs.com/Liuyunsan/p/15938556.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有