设计模式-工厂模式

介绍

工厂模式定义创建对象的接口,让子类决定实例化哪个类。

主要解决:隐藏对象创建逻辑
使用场景
1.日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
2.数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
3.设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。

优点
1.隐藏对象创建逻辑,用户只需知道名称就可以了。
2.可扩展性高如果想增加一个产品,只要扩展一个工厂类就可以。

缺点
1.类结构的复杂化。每次增加产品都需要增加一个具体类和对象实现工厂。

UML类图

设计模式-工厂模式_第1张图片

代码实现

People.java

public abstract class People {

    public abstract void speak();
}

Woman.java

public class Woman extends People{

    @Override
    public void speak() {
        System.out.println("I am a woman!");
    }
}

Man.java

public class Man extends People{
    
    @Override
    public void speak() {
        System.out.println("I am a man!");
    }
}

PeopleFactory.java

public class PeopleFactory {

    public  T create(Class clz){
        People p = null;
        try {
            p = (People)Class.forName(clz.getName()).newInstance();
            p.speak();
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return (T)p;
    }
}

Main.java

public class Main {

    public static void main(String[] args) {
        PeopleFactory factory = new PeopleFactory();
        factory.create(Woman.class);
        factory.create(Man.class);
    }
}

输出

I am a woman!
I am a man!

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