工厂方法模式-大话设计模式

简介: 工厂方法模式-大话设计模式

一、概念

工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。


抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。


具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。


抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。


具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专


门的具体工厂创建,它们之间往往一一对应。

二、代码实现

需求:显示两个数的计算(加、减、乘除、次方、方根)

抽象工厂:

 
public interface IFactory {
    public Operation createOperation(String operate);
}

具体工厂:

public class OperationFactory {
    public static Operation createOperate(String operate) {
        Operation oper = null;
        IFactory factory = null;
        switch (operate) {
            case "+":
            case "-":
            case "*":
            case "/":
                factory = new FactoryBasic();
                break;
            case "pow":
            case "log":
                factory=new FactoryAdvanced();
        }
        oper = factory.createOperation(operate);
        return oper;
    }
 
}
 
 
public class FactoryBasic implements IFactory{
 
    @Override
    public Operation createOperation(String operate) {
        Operation oper = null;
        switch (operate) {
            case "+":
                oper = new Add();
                break;
            case "-":
                oper = new Sub();
                break;
            case "*":
                oper = new Mul();
                break;
            case "/":
                oper = new Div();
                break;
 
        }
        return oper;
    }
}
public class FactoryAdvanced implements IFactory{
 
    @Override
    public Operation createOperation(String operate) {
        Operation oper = null;
        switch (operate) {
            case "pow":
                oper = new Pow();
                break;
            case "log":
                oper = new Log();
                break;
        }
        return oper;
    }
}


抽象产品:

public abstract class Operation {
    public abstract double getResult(double numberA,double numberB);
}

具体产品:

public class Add extends Operation {
    @Override
    public double getResult(double numberA, double numberB) {
        return numberA+numberB;
    }
}
public class Div extends Operation {
    @Override
    public double getResult(double numberA, double numberB) {
        if (numberB==0) {
            throw  new ArithmeticException();
        }
        return numberA/numberB;
    }
}
public class Log extends Operation {
    @Override
    public double getResult(double numberA, double numberB) {
        return Math.log(numberB)/Math.log(numberA);
    }
}
public class Mul extends Operation {
    @Override
    public double getResult(double numberA, double numberB) {
        return numberA*numberB;
    }
}
public class Pow extends Operation {
    @Override
    public double getResult(double numberA, double numberB) {
        return Math.pow(numberA,numberB);
    }
}
public class Sub extends Operation {
    @Override
    public double getResult(double numberA, double numberB) {
        return numberA-numberB;
    }
}

测试:

   public static void main(String[] args) {
        Operation log = OperationFactory.createOperate("pow");
        System.out.println(log.getResult(10, 2));
    }


目录
相关文章
|
2天前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
|
3天前
|
设计模式 存储 算法
设计模式学习心得之五种创建者模式(2)
设计模式学习心得之五种创建者模式(2)
12 2
|
8天前
|
设计模式 Java 数据库连接
Java设计模式之工厂方法模式详解
Java设计模式之工厂方法模式详解
|
9天前
|
设计模式 算法
行为型设计模式之模板模式
行为型设计模式之模板模式
|
1月前
|
设计模式 Java 数据库
【设计模式】JAVA Design Patterns——Converter(转换器模式)
转换器模式旨在实现不同类型间的双向转换,减少样板代码。它通过通用的Converter类和特定的转换器(如UserConverter)简化实例映射。Converter类包含两个Function对象,用于不同类型的转换,同时提供列表转换方法。当需要在逻辑上对应的类型间转换,或处理DTO、DO时,此模式尤为适用。
【设计模式】JAVA Design Patterns——Converter(转换器模式)
|
21天前
|
设计模式 新零售 Java
设计模式最佳套路5 —— 愉快地使用工厂方法模式
工厂模式一般配合策略模式一起使用,当系统中有多种产品(策略),且每种产品有多个实例时,此时适合使用工厂模式:每种产品对应的工厂提供该产品不同实例的创建功能,从而避免调用方和产品创建逻辑的耦合,完美符合迪米特法则(最少知道原则)。
35 6
|
21天前
|
设计模式 XML Java
【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
三 结尾 如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持! 如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号
22 5
|
21天前
|
设计模式 Java 关系型数据库
设计模式第2弹:工厂方法模式
type ComputerProduct struct{} // 实现工厂方法 func (computer ComputerProduct) GetInformation() string { return "电脑,官方称呼计算机,主要用于进行数据运算的一台机器。" }
27 4
|
3天前
|
设计模式 安全 Java
设计模式学习心得之五种创建者模式(1)
设计模式学习心得之五种创建者模式(1)
5 0
|
3天前
|
设计模式
简单工厂模式-大话设计模式
简单工厂模式-大话设计模式
7 0

热门文章

最新文章