Java设计模式(二)之工厂模式(1)

**

一、引言

**
1)没有工厂:以运算符号为例,加入我们需要用到加减法,每次都要去创建一个加法类,减法类
2)简单工厂模式:客户不用直接去创建类,直接调用运算工厂,然后客户要什么符号直接找到这个工厂就可以了。

二、简单工厂特点

1)一个抽象产品类,可以派生出多个具体产品类。
2)一个抽象工厂类,可以派生出多个具体工厂类。
3)每个具体工厂类只能创建一个具体产品类的实例。

三、代码实现

没有工厂的时候:客户需要直接去new对象。

public class Plus {
     
    public Plus(){
     
        System.out.println("加法加法!!");
    }
}

public class Subtract {
     
    public Subtract(){
     
        System.out.println("减法减法!!");
    }
}

public class Customer {
     
    public static void main(String[] args) {
     
        Plus plus = new Plus();
        Subtract subtract = new Subtract();
    }
}

简单工厂模式:包含三个对象
产品类:

//抽象产品类
abstract class Symbol {
     
    public Symbol(){
     

    }
}

//产品实现类
public class Plus extends Symbol {
     
    public Plus() {
     
        System.out.println("创建加法类");
    }
}
public class Subtract extends Symbol{
     
    public Subtract(){
     
        System.out.println("创建减法类");
    }
}

工厂类:

//工厂类
public class Factory {
     
    public Symbol createSymbol(char type) {
     
        switch (type) {
     

            case '-':
                return new Subtract();

            case '+':
                return new Plus();

            default:
                break;
        }
        return null;
    }
}

客户类:

//客户类
public class Customer {
     
    public static void main(String[] args) {
     
        Factory factory = new Factory();
        Symbol plus = factory.createSymbol('+');
        Symbol subtract = factory.createSymbol('-');
    }
}

简单工厂的组成:
1)工厂类角色:
这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品例如
2) 抽象产品角色:
它一般是具体产品继承的父类或者实现的接口(需要被继承或实例化)。例如运算符号的抽象产品Symbol。
3) 具体产品角色:
工厂类所创建的对象就是此角色的实例。例如加法减法的具体实现类。

简单工厂类对客户隐藏了创建对象的细节,只需要声明调用的方法。但是这种方法还是存在问题,当新的运算符号要添加的时候,首先继承Symbol类,但是在工厂里要修改原有的代码,不符合开闭原则。此时需要一种新的模式,来对简单工厂进行优化,那便是工厂模式存在的意义。

你可能感兴趣的:(设计模式)