文档章节

设计模式之工厂模式(Factory Pattern)

一滴水穿石
 一滴水穿石
发布于 2018/01/13 14:58
字数 606
阅读 24
收藏 1

工厂模式分为:简单工厂模式,工厂方法模式,抽象工厂模式

简单工厂模式:

        简单工厂模式分离产品的创建者和消费者,有利于软件系统结构的优化;但是由于一切逻辑都集中在一个工厂类中,导致了没有很高的内聚性,同时也违背了“开放封闭原则”。另外,简单工厂模式的方法一般都是静态的,而静态工厂方法是无法让子类继承的,因此,简单工厂模式无法形成基于基类的继承树结构。

示例代码:

public class FoodFactory {

    public static Food getFood(String type){

        try {
            if("MC".equals(type.toUpperCase())){
                return McChicken.class.newInstance();
            }else if("CHIP".equals(type.toUpperCase())){
                return Chips.class.newInstance();
            }else {
                return null;
            }

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static Food getFood(Class<? extends Food> foodClass){

        try {
            if(McChicken.class.equals(foodClass)){
                return McChicken.class.newInstance();
            }else if(Chips.class.equals(foodClass)){
                return Chips.class.newInstance();
            }else {
                return null;
            }

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

工厂方法模式:

    简单工厂模式严重违背了“开闭原则”,难以拓展,由此产生了工厂方法模式。工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

示例代码:

定义接口:

public interface FactoryBMW {

    BMW createBMW();
}

实现接口:

public class FactoryBMW320 implements FactoryBMW {

    @Override
    public BMW createBMW() {
        return new BMW320();
    }
}

public class FactoryBMW523 implements FactoryBMW {

    @Override
    public BMW createBMW() {
        return new BMW523();
    }
}

定义实例:

public class BMW {

    public BMW(){

    }
}

public class BMW320 extends BMW {

    public BMW320(){
        System.out.println("320");
    }
}

public class BMW523 extends BMW {

    public BMW523(){
        System.out.println("523");
    }
}

测试方法:

public class Test {

    public static void main(String[] args) {
        FactoryBMW factoryBMW = new FactoryBMW320();
        factoryBMW.createBMW();
    }
}

抽象工厂模式:

定义工厂:

public interface AbstractFactory {

    Engine createEngine();

    Aircondition createAircondition();
}

public class FactoryBMW320 implements AbstractFactory {

    @Override
    public Engine createEngine() {
        return new EngineA();
    }

    @Override
    public Aircondition createAircondition() {
        return new AirconditionA();
    }
}

public class FactoryBMW523 implements AbstractFactory {

    @Override
    public Engine createEngine() {
        return new EngineB();
    }

    @Override
    public Aircondition createAircondition() {
        return new AirconditionB();
    }
}

定义组件:

public interface Aircondition {
}

public class AirconditionA implements Aircondition {

    public AirconditionA(){
        System.out.println(AirconditionA.class.getSimpleName());
    }
}

public class AirconditionB implements Aircondition {

    public AirconditionB(){
        System.out.println(AirconditionB.class.getSimpleName());
    }
}

public interface Engine {

}

public class EngineA implements Engine {

    public EngineA(){
        System.out.println(EngineA.class.getSimpleName());
    }

}

public class EngineB implements Engine {

    public EngineB(){
        System.out.println(EngineB.class.getSimpleName());
    }

}

测试方法:

public class Test {

    public static void main(String[] args) {
        AbstractFactory factory = new FactoryBMW320();
        factory.createEngine();
        factory.createAircondition();
    }

}

 

© 著作权归作者所有

一滴水穿石
粉丝 5
博文 113
码字总数 31515
作品 0
延庆
私信 提问
设计模式之抽象工厂模式(创建型)

模式定义 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。 模式角色 抽象...

smileNicky
01/01
0
0
Design Patterns In FE --- 工厂模式

示例代码地址: github.com/FatGe/Desig… 工厂模式 工厂,是构造方法的抽象,用来实现不同的分配方案。它所涉及三类模式,简单工厂模式、工厂方法模式、抽象工厂模式本质上都是为了实例化。...

Yzz
08/06
0
0
设计模式: Java中的工厂设计模式

原文链接 https://github.com/shellhub/blog/issues/22 前言 工厂设计模式(Factory Design Pattern)属于创建模式之一,工厂设计模式在JDK,Spring,Stuts被广泛使用 当一个类或者接口有多个子类...

shellhub
2018/08/22
0
0
Java设计模式系列一(前言)

说起设计模式,很多人都会觉得这个概念很熟悉,会想到单例模式、工厂模式等等,但是似乎又说不出来什么,说不上它的核心思想和设计原则。其实我们的项目中,为了代码复用,增加可维护性,很多...

Mooree
04/07
30
0
代理模式(Proxy Pattern):动态代理 - 最易懂的设计模式解析

前言 今天我来全面总结开发中最常用的设计模式 - 代理模式中的动态代理模式 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(Sim...

Carson_Ho
2018/04/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

006-Docker中导出单个或多个tar包

docker中导出单个镜像和多个镜像的tar包 docker save [images] > [name.tar] docker save [images] [images] > [name.tar]...

伟大源于勇敢的开始
今天
8
0
Kotlin基础语法学习

安装好安卓studio,以及插件支持Kotlin 就可以在创建项目的时候选择 Kotlin语言了。 https://www.jianshu.com/p/4ab13691d681 参考手册: https://www.runoob.com/kotlin/otlin-android-setu...

T型人才追梦者
今天
6
0
java实现简单计算器

1.概述 之前作者写过一篇文章,也是关于计算器的,用的是C++与Qt,链接在这里 这次用java的swing写的(这差距好像有点大,好吧是qt太强了). 先上图: 2.UI 总体布局使用流布局. (1)文本框 文本框就...

Blueeeeeee
今天
9
0
纯CSS实现DIV悬浮(固定位置)

纯CSS实现的DIV悬浮效果(固定位置),兼容常用的浏览器:IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗等。效果如下: 实现代码: <!DOCTYPE html> <html> <head> <meta ...

独钓渔
今天
6
0
OSChina 周二乱弹 —— 给我来个女菩萨

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐#分享XXXTENTACION/Travis Barker的单曲《Pain = BESTFRIEND》: 《Pain = BESTFRIEND》- XXXTENTACION/...

小小编辑
今天
119
4

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部