开发者社区> 游客sfvrpiloxozae> 正文

工厂设计模式、简单工厂设计模式、抽象工厂设计模式(2)

简介: 工厂设计模式、简单工厂设计模式、抽象工厂设计模式(2)
+关注继续查看

分别有三个产品ProductA、ProductB、ProductC ,均实现Product接口


//ProductA
public class ProductA implements Product {
    @Override
    public int price() {
        return 100;
    }

    @Override
    public String getName() {
        return "ProductA";
    }
}

//ProductB
public class ProductB implements Product {
    @Override
    public int price() {
        return 200;
    }

    @Override
    public String getName() {
        return "ProductB";
    }
}

//ProductC
public class ProductC implements Product {
    @Override
    public int price() {
        return 300;
    }

    @Override
    public String getName() {
        return "ProductC";
    }
}


定义一个生产工厂类,根据输入类型生产对应的产品



public class Factory {

    /**
     * 根据生产类型生产对应的产品
     * @param type
     * @return
     */
    public static Product createProduct(String type){

        Product product =null;


        switch (type){

            case "A":

                product = new ProductA();
                break;
            case "B":
                product = new ProductB();

                break;
            case "C":
                product = new ProductC();

                break;


        }
        return product;
        
    }

}


根据输入的生产类型生产对应的产品


Product productA = Factory.createProduct("A");
System.out.println("productA name="+productA.getName()+",getPrice:"+productA.getPrice());

Product productB = Factory.createProduct("B");
System.out.println("productB name="+productB.getName()+",getPrice:"+productB.getPrice());

Product productC = Factory.createProduct("C");
System.out.println("productC name="+productC.getName()+",getPrice:"+productC.getPrice());


输出结果:


productA name=ProductA,getPrice:100
productB name=ProductB,getPrice:200
productC name=ProductC,getPrice:300


以上便是简单工厂模式的一个典型事例,当用户需要新增产品ProductD时,必须在工厂类的生产方法中增加对应的判断分支,所以简单工厂模式违背了开放封闭原则。


简单工厂模式,利用静态方法根据输入参数生成对应的产品,隐藏了产品实例化的细节。


总结: 简单工厂模式最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。但是当需求变动的时候,需要对原有的类进行修改,违背了开放封闭原则。


工厂设计模式,简单工厂设计模式、抽象工厂设计模式链接:https://www.jianshu.com/p/d27d698802fd


三、工厂设计模式


通过工厂方法模式,可以解决简单工厂模式的问题。


首先声明一个工厂接口,所有工厂必须实现这个接口



public interface IFactory {
    
    Product createProduct();
}


生产ProductA的工厂FactoryA

public class FactoryA implements IFactory {
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}

生产ProductB的工厂FactoryB

public class FactoryB implements IFactory {
    @Override
    public Product createProduct() {
        return new ProductB();
    }
}


同样地,生产ProductC的工厂FactoryC跟以上模式一样。

现在来根据新的工厂方法模式来生产



IFactory factoryA = new FactoryA();

Product productA = factoryA.createProduct();
System.out.println("productA name="+productA.getName()+",getPrice:"+productA.getPrice());

IFactory factoryB = new FactoryB();

Product productB = factoryB.createProduct();
System.out.println("productB name="+productB.getName()+",getPrice:"+productB.getPrice());


IFactory factoryC = new FactoryB();

Product productC = factoryC.createProduct();

System.out.println("productC name="+productC.getName()+",getPrice:"+productC.getPrice());


输出结果:


productA name=ProductA,getPrice:100

productB name=ProductB,getPrice:200

productC name=ProductC,getPrice:300


当需要增加一个新产品ProductD,只需要新建对应的FactoryD来实现生产功能即可,对原有的代码没有任何影响,非常符合开放封闭原则,但是由于每增加一个产品,都需要新增对应的生产工厂,导致增加额外的开发工作量。


总结:由于使用了多态,工厂方法克服了简单工厂违背的开放封闭原则的缺点,又保持了封装对象创建过程的优点。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
[设计模式]工厂方法模式
简介 工厂方法模式 (Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其他子类。  工厂模式是一种类创建型模式 (可参考 设计模式 创建型模式)。
736 0
[设计模式]简单工厂模式
简介 简单工厂模式 (Simple Factory) 又叫静态工厂方法(Static Factory Method)模式。 简单工厂模式通常是定义一个工厂类,这个类可以根据不同变量返回不同类的产品实例。
596 0
设计模式快速学习(二)抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
833 0
设计模式之四(抽象工厂模式第三回合)
原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如IFactory factory=new AccessFactory(),在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。
685 0
[设计模式]抽象工厂模式
简介 抽象工厂模式 (Abstract Factory)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 抽象工厂模式是一种类创建型模式 (可参考 设计模式 创建型模式)。
715 0
设计模式之四(抽象工厂模式第一回合)
原文:设计模式之四(抽象工厂模式第一回合) 前言 首先关于抽象工厂模式的学习,我们需要慢慢的,由浅入深的进入。不能单刀直入,否则可能达不到预期学明白的目标。 第一回合    首先我们从最简单的数据访问程序开始吧。
656 0
设计模式之二(简单工厂模式)
原文:设计模式之二(简单工厂模式) 前言   简单工厂模式根据提供的数据或者参数返回几个可能的类中的一个实例,说通俗点有点像面向对象编程中的多态性,一个基类,有多个派生类,在另外的调用程序中,根据参数来决定返回这个基类的哪个具体的派生类,返回值为基类类型,因为基类的引用可以指向派生类对象,而且这些所有的派生类都包含有基类的函数,也就是说派生类中有相同的函数,但是函数的实现可能不同。
629 0
03二十三种设计模式之抽象工厂模式
03二十三种设计模式之抽象工厂模式
23 0
351
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载