工厂设计模式、简单工厂设计模式、抽象工厂设计模式(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来实现生产功能即可,对原有的代码没有任何影响,非常符合开放封闭原则,但是由于每增加一个产品,都需要新增对应的生产工厂,导致增加额外的开发工作量。


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


目录
相关文章
|
1月前
|
设计模式
设计模式之抽象工厂
设计模式之抽象工厂
|
1月前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
1月前
|
设计模式 Java PHP
php设计模式--简单工厂模式(一)
php设计模式--简单工厂模式(一)
18 0
|
4天前
|
设计模式 Java 编译器
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
|
17天前
|
设计模式 XML Java
【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
三 结尾 如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持! 如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号
21 5
|
14小时前
|
设计模式 Java
设计模式-抽象工厂(JAVA)
设计模式-抽象工厂(JAVA)
3 0
|
1月前
|
设计模式
设计模式之工厂 Factory
设计模式之工厂 Factory
22 1
|
1月前
|
设计模式 uml
【设计模式】一文搞定简单工厂模式!
【设计模式】一文搞定简单工厂模式!
20 2
|
1月前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
1月前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式