栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式——工厂方法模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式——工厂方法模式

        提到工厂我们就离不开一个词——产品,在我们现实生活中,社会分工越来越细并且越来越专业,各种产品都有专门的工厂生产,比如现在马上入伏了,天气炎热,快乐肥宅水(可乐)我相信很多人跟我一样都离不开它,快乐肥宅水常见的俩个品牌就是可口可乐以及百事可乐,这俩种可乐分别来自不同的工厂,下面用代码来阐述下俩种工厂生产快乐肥宅水的过程。

        首先我们得把工厂抽象出来,抽象工厂,这是该模式第一个主要角色

public interface ColaFactory {
    Product product();
}

     工厂是可以生产产品的,所以有个方法product(),product返回值是一个产品接口,也就是我们该模式设计到的第二个角色,抽象产品,代码如下:

public interface Product {
    String getName();
}

接下来我们来创建可口可乐工厂以及百事可乐工厂,这是该模式第三个主角,具体工厂:

public class CocaColaFactory implements ColaFactory {
    @Override
    public Product product() {
        return new CocaCola();
    }
}
public class PepsiColaFactory implements ColaFactory {
    @Override
    public Product product() {
        return new PepsiCola();
    }
}

具体的工厂生产具体的产品,第四个主角就出现了,具体产品:

public class CocaCola implements Product{

    @Override
    public String getName() {
        return "可口可乐";
    }
}
public class PepsiCola implements Product {

    @Override
    public String getName() {
        return "百事可乐";
    }
}

写个例子测试一下:

public class start {
    public static void main(String[] args) {
        ColaFactory colaFactory1 = new CocaColaFactory();
        Product product1 = colaFactory1.product();
        System.out.println("可口可乐工厂生产出" + product1.getName());

        ColaFactory colaFactory2 = new PepsiColaFactory();
        Product product2 = colaFactory2.product();
        System.out.println("百事可乐工厂生产出" + product2.getName());
    }
}

结果如下:

 下面附上工厂方法模式的UML图(此图来源《软件设计模式:Java版》):

         假如由于现在天气太热,快乐肥宅水的需求量太大,可口可乐公司跟百事可乐公司供不应求,正好有家公司提供代理生产,它既可以生产可口可乐,也可以生产百事可乐,下面我们用代码来实现这家代理公司生产过程,这时候工厂方法模式就退化成简单工厂模式。

代理工厂代码:

public class ColaProxyFactory {
    public Product product(String carName){
        if(carName.equals("coca")){
            return new CocaCola();
        }else if (carName.equals("pepsi")){
            return new PepsiCola();
        }else {
            return null;
        }
    }
}

测试代码:

public class start {
    public static void main(String[] args) {
        ColaProxyFactory colaProxyFactory = new ColaProxyFactory();
        //生产可口可乐
        Product coca = colaProxyFactory.product("coca");
        System.out.println("生产出" + coca.getName());

        //生产百事可乐
        Product pepsi = colaProxyFactory.product("pepsi");
        System.out.println("生产出" + pepsi.getName());
    }
}

结果:

 注意:简单工厂模式不属于GOF的23中经典设计模式。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005665.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号