java工厂设计模式

工厂模式:

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

详细分类:简单工厂模式,工厂方法模式,抽象工厂模式

OOP七大原则:

  • 开闭原则:一个软件的实体应当对扩展开放,对修改关闭
  • 依赖倒转原则:针对接口编程,不要针对实现编程
  • 迪米特法则:只与你直接朋友通信,而避免和陌生人通信

核心本质:

实例化对象不使用new,用工厂方法代替

将选择实现类,创建对象统一管理起来和控制,从而将调用者跟我们实现类解耦。

三种模式:

简单工厂模式:(静态工厂)

用来生产同一个等级结构中的任意的产品(对于增加新的产品,需要球盖已经有的代码)

工厂方法模式:

用于生产同一个等级结构中固有的产品(支持增加任意产品)

抽象工厂模式:

围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂

案例:

简单工厂:

接口:

Car:

public interface Car {
    //方法
    void name();
}

具体的品牌Car:

奥迪

public class Audi implements Car{
    @Override
    public void name() {
        System.out.println("奥迪!");
    }
}

特斯拉:

public class Tesla implements Car{
    @Override
    public void name() {
        System.out.println("特斯拉!");
    }
}

车工厂CarFactory

//静态工厂模式
//增加一个新的产品,如果你不修改代码,做不到!

//开闭原则
public class CarFactory {

    public static Car getCar(String car){
        if(car.equals("奥迪!")){
            return new Audi();
        }else if (car.equals("特斯拉!")){
           return new Tesla();
        }else {
            return null;
        }
    }

    //方式二:
    public static  Car getAudi(){

        return new Audi();
    }

    public static Car getTesla(){
        return new Tesla();
    }
}

消费者:

public class Consumer {

    public static void main(String[] args) {

        Car audi = new Audi();
        Car tesla = new Tesla();
        audi.name();
        tesla.name();

    }
}
结果:
奥迪!
特斯拉!

工厂方法模式:

Car:

public interface Car {
    //方法
    void name();
}

CarFactory:

public interface CarFactory {   
Car getcar();
}

Audi:

public class Audi implements Car {
    @Override
    public void name() {
        System.out.println("奥迪!");
    }
}

AudiFactory:

public class AudiFactory implements CarFactory {

    @Override
    public Car getcar() {
        return new Audi();
    }
}

Tesla:

public class Tesla implements Car {
    @Override
    public void name() {
        System.out.println("特斯拉!");
    }
}

TelaFactory

public class TeslaFactory implements CarFactory {

    @Override
    public Car getcar() {
        return new Tesla();
    }
}

Consumer:

public class Consumer {

    public static void main(String[] args) {
        Car tesla = new TeslaFactory().getcar();
        Car audi = new AudiFactory().getcar();
        Car getcar = new ModikeFactory().getcar();

        tesla.name();
        audi.name();
        getcar.name();


    }

    /*
    * 简单工厂模式跟工厂方法模式对比
    * 结构那个更不复杂:简单工厂
    * 代码那个更不复杂:简单工厂
    * 编程更不复杂度:简单工厂
    * 管理上的更不复杂度:简单工厂
    *
    * 根据设计的原则:工厂方法模式!
    * 根据业务的原则:简单工厂模式!
    *
    * */
}


posted @ 2020-04-22 18:08  金融融融融果果  阅读(247)  评论(0编辑  收藏  举报