工厂模式

问尤龙の时光 该配合你演出的我,却视而不见。。 本文由博客端 http://www.wenyoulong.com 主动推送

1.工厂模式

工厂模式根据传递的参数来决定生产的产品,增加产品需要改动工厂的的代码,在明确不同条件生产不同实例的情况下可以使用这个模式(一般这个模式可以应付大多数场景了)

image.png

代码

手机接口:

public interface Phone {
    void phoneInfo();
}

华为手机

public class Huawei implements Phone {

    @Override
    public void phoneInfo() {
        System.out.println("我是华为手机");
    }
}

小米手机

public class Xiaomi implements Phone {

    @Override
    public void phoneInfo() {
        System.out.println("我是小米手机");
    }
}

生产工厂,在工厂中,根据不同的类型,生成不同的手机

public class PhoneFactory {
    public Phone createPhone(String type){
        Phone product =null;
        switch (type){
            case "huawei":
                product = new Huawei();
                break;
            case "xiaomi":
                product = new Xiaomi();
                break;
        }
        return product;
    }
}

测试工厂方法

public class CreatePhone {
    public static void main(String[] args){
        PhoneFactory factory = new PhoneFactory();
        Phone huawei = factory.createPhone("huawei");
        huawei.phoneInfo();
        Phone xiaomi = factory.createPhone("xiaomi");
        xiaomi.phoneInfo();
    }
}

测试结果

image.png

2.抽象工厂模式

抽象工厂模式解决了工厂模式增加产品需要修改工厂代码的问题,其实就是对工厂也进行抽象,得到一个生产工厂的工厂,在具体的工厂中,可以增加产品,每个工厂也是一个产品簇,这样符合开闭原则,功能扩展性强,但是产品簇的扩展比原来难

image.png

代码信息

手机接口

public interface Phone {
    void phoneInfo();
}

华为手机

public class HuaweiPC implements PC {
    @Override
    public void pcInfo() {
        System.out.println("我是华为电脑");
    }
}

小米手机

public class XiaomiPhone implements Phone {
    @Override
    public void phoneInfo() {
        System.out.println("我是小米手机!");
    }
}

电脑信息

电脑接口

public interface PC {
    void pcInfo();
}

华为电脑

public class HuaweiPC implements PC {
    @Override
    public void pcInfo() {
        System.out.println("我是华为电脑");
    }
}

小米电脑

public class XiaomiPC implements PC {
    @Override
    public void pcInfo() {
        System.out.println("我是小米电脑");
    }
}

工厂信息

抽象工厂

public interface ProductFactory {
    Phone createPhone();
    PC createPC();
}

华为工厂生产华为手机和华为电脑

public class HuaweiFactory implements ProductFactory {
    @Override
    public Phone createPhone() {
        return new HuaweiPhone();
    }

    @Override
    public PC createPC() {
        return new HuaweiPC();
    }
}

小米工厂生产小米手机和小米电脑

public class XiaomiFactory implements ProductFactory {
    @Override
    public Phone createPhone() {
        return new XiaomiPhone();
    }

    @Override
    public PC createPC() {
        return new XiaomiPC();
    }
}

盗版工厂生产华为手机和小米电脑

public class PiracyFactory implements ProductFactory {
    @Override
    public Phone createPhone() {
        System.out.println("盗版商家--");
        return new HuaweiPhone();
    }

    @Override
    public PC createPC() {
        System.out.println("盗版商家--");
        return new XiaomiPC();
    }
}

测试生产

public class CreateProduct {
    public static void main(String[] args){
        ProductFactory xiaomiFactory = new XiaomiFactory();
        ProductFactory huaweiFactory = new HuaweiFactory();
        ProductFactory piracyFactory = new PiracyFactory();
        xiaomiFactory.createPhone().phoneInfo();
        xiaomiFactory.createPC().pcInfo();
        huaweiFactory.createPhone().phoneInfo();
        huaweiFactory.createPC().pcInfo();
        piracyFactory.createPhone().phoneInfo();
        piracyFactory.createPC().pcInfo();
    }
}

结果

image.png

  • 开发
    32 引用 • 156 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2990 引用 • 8141 回帖 • 593 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    189 引用 • 119 回帖
回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...