美文网首页
Java设计模式-工厂模式

Java设计模式-工厂模式

作者: 爱情绅士 | 来源:发表于2018-12-15 22:41 被阅读0次

工厂模式可以细分成三种:
1 简单工厂
2 工厂方法
3 抽象工厂

简单工厂

简单工厂.png
//定义一个手机接口,手机必须按照这个标准来
public interface Phone {
    String getName();
}
public class HuaWei implements Phone {
    @Override
    public String getName() {
        return "这是一个华为手机";
    }
}
public class XiaoMi implements Phone {
    @Override
    public String getName() {
        return "这是一个小米手机";
    }
}
/**
 * 简单工厂模式
 */
//定义一个生产手机的工厂类
public class PhoneFactory {

    static Phone getPhone(String name) {
        if (name.equals("华为")) {
            return new HuaWei();
        }else if (name.equals("小米")) {
            return new XiaoMi();
        }else {
            System.out.println("暂不生产该手机");
            return null;
        }
    }
}
public class Test {
    public static void main(String[] args) {
        Phone phone=PhoneFactory.getPhone("华为");
        System.out.println(phone.getName());
    }
}

结果:

result.png
思考:世界上存在这种工厂吗?这么牛逼,同时生产华为和小米,乃至任何东西,不符合实际。引出 工厂方法模式

工厂方法

工厂方法.png
//声明一个工厂接口,工厂必须符合下面的标准
public interface FunctionFactory {
    Phone getPhone();
}
public class HuaWeiFactory implements FunctionFactory{
    @Override
    public Phone getPhone() {
        return new HuaWei();
    }
}
public class XiaoMiFactory implements FunctionFactory {
    @Override
    public Phone getPhone() {
        return new XiaoMi();
    }
}
public class Test {
    public static void main(String[] args) {
        Phone phone = new HuaWeiFactory().getPhone();
        System.out.println(phone.getName());
    }
}

结果:

result.png
思考:这个进阶版更加符合实际一点,各个工厂有自己的科技。但是用户需要知道厂家。引出 抽象工厂模式

抽象工厂

public abstract class Factory {
    public abstract Phone getPhone();

    public static Phone getPhoneByName(String name) {
        if (name.equals("华为")) {
            return new HuaWeiF().getPhone();
        }else if (name.equals("小米")) {
            return new XiaoMiF().getPhone();
        }else {
            System.out.println("暂不生产该手机");
            return null;
        }
    }
}
public class HuaWeiF extends Factory {
    @Override
    public Phone getPhone() {
        return new HuaWei();
    }
}
public class XiaoMiF extends Factory {
    @Override
    public Phone getPhone() {
        return new XiaoMi();
    }
}
public class Test {
    public static void main(String[] args) {
        Phone phone = Factory.getPhoneByName("华为");
        System.out.println(phone.getName());
    }
}

结果:

image.png
思考: 这个怎么样,用户不需要知道厂商,只关心结果。在简单工厂中,各个工厂的业务逻辑非常复杂,代码很乱。抽象工厂可以隐藏复杂的逻辑业务,易于维护。

结语

归纳一下

简单工厂模式
一个工厂生产各种各样的东西,看似功能强大,其实不现实。用户不关心怎么实现

工厂方法模式
定义一个工厂接口,在制定一些标准,比如:不同品牌的汽车工厂,都要实现这个接口,
都要实现这些标准,比如:汽车安全达标。
调用的时候,实例化工厂,用户需关心内部实现

抽象工厂模式
定义一个抽象工厂类,让其他工厂来继承他,拥有相同的方法不同的实现,对用户来说,不需要关心内部实现,对这个方法类来说。很好维护,如果在简单工厂中,各个工厂的业务逻辑非常复杂,代码很乱。抽象工厂可以隐藏复杂的逻辑业务,只关心结果。

PS:看懂了就要自己写出来,尝试换一个例子

相关文章

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • Java设计模式之01_Factory(工厂模式)

    更多Java设计模式:Java设计模式-目录 一、工厂模式介绍 工厂模式专门负责将大量有共同接口的类实例化。工厂模...

  • 设计模式——工厂模式和抽象工厂模式

    Java设计模式——工厂模式 工厂模式和抽象工厂模式都属于创建型模式。 创建型模式这些设计模式提供了一种在创建对象...

  • 设计模式之工厂模式

    工厂模式 工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种设计模式属于创建型模式,...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • 设计模式-工厂模式

    工厂模式定义: 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式...

  • 设计模式之工厂模式详解(附源代码)

    工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创...

  • 工厂模式

    工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创...

  • 设计模式--简单工厂模式

    什么是工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式...

网友评论

      本文标题:Java设计模式-工厂模式

      本文链接:https://www.haomeiwen.com/subject/oslzhqtx.html