ICode9

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

设计模式:工厂模式

2021-01-05 23:01:31  阅读:163  来源: 互联网

标签:zsp name package Car 模式 工厂 设计模式 com public


工厂模式分为:
简单工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要球盖已有代码)
工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)

简单工厂模式图解:
在这里插入图片描述
测试类:

package com.zsp.simple;

public class TestDemo {
    public static void main(String[] args) {
        Car car1 = CarFactory.getCar("五菱宏光");
        Car car2 = CarFactory.getCar("特斯拉");
        car1.name();
        car2.name();
    }
}

我们的实例需要具有的特征:

package com.zsp.simple;

public interface Car {
    public void name();
}

实例工厂:

package com.zsp.simple;

public class CarFactory {
    public static Car getCar(String carName){
        if (carName.equals("五菱宏光"))
        {return new WuLing();}
        else if(carName.equals("特斯拉"))
        {return new Tesla();}
        else {
            return null;
        }
    }

}

具体的实例1:

package com.zsp.simple;

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

具体实例2:

package com.zsp.simple;

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

工厂方法模式:
在这里插入图片描述
测试方法:

package com.zsp.method;

public class TestDemo {
    public static void main(String[] args) {
        Car car1 = new WuLingFactory().getCar();
        Car car2 =new TeslaFactory().getCar();
        car1.name();
        car2.name();
    }
}

实例的特征:

package com.zsp.method;

public interface Car {
    public void name();
}

创造一个所有车的总工厂,将工厂也变成一个实例:

package com.zsp.method;

public interface CarFactory {
    public Car getCar();

}

车实例:

package com.zsp.method;

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

车实例的工厂:

package com.zsp.method;

public class WuLingFactory implements CarFactory {

    @Override
    public Car getCar() {
        return new WuLing();
    }
}

车实例:

package com.zsp.method;

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

车实例的工厂:

package com.zsp.method;

public class TeslaFactory implements CarFactory {


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

相比之下工厂方法的解耦程度比简单工厂方法高,且如果要创造新的实例不用去修改工厂而是再继承即可。但是太复杂了相较于简单工厂模式。

结构复杂度:simple
代码复杂度:simple
编程复杂度:simple
管理上的复杂度:simple
根据设计原则:工厂方法模式!
根据实际业务:简单工厂模式!

标签:zsp,name,package,Car,模式,工厂,设计模式,com,public
来源: https://blog.csdn.net/qq_42388853/article/details/112254495

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

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

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

ICode9版权所有