研磨设计模式--简单工厂

简单工厂模式的定义:

提供一个创建对象实例的功能,而无需关心其具体实现,被创建实例的类型可以是接口、抽象类,也可以是具体的类。
将要创建的类:
Api:定义客户所需要的功能接口。
Impl:具体实现Api的实现类。
Impl2:具体实现Api的实现类。
Factory:工厂,选择合适的实现类,来创建Api接口对象。
Client:客户端,通过Factory来回去Api接口对象,然后面向Api接口编程。

/**
 * 接口的定义,该接口可以通过简单工厂来创建
 */
public interface Api {
    
    
    void test(String s);
}
public class Impl implements Api{
    
    
    @Override
    public void test(String s) {
    
    
        // 实现功能的代码
        System.out.println("Impl s= "  + s);
    }
}
public class Impl2 implements Api{
    
    
    @Override
    public void test(String s) {
    
    
        System.out.println("Impl2 s= "  + s);
    }
}

/**
 * 工厂类,用来创建Api对象
 */
@Slf4j
public class Factory {
    
    

// 方式1
    //    public static Api createApi(Integer type) {
    
    
//        Api api = null;
//        if (type == 1) {
    
    
//            return new Impl();
//        } else if (type == 2) {
    
    
//            return new Impl2();
//        }
//        return api;
//    }
    public static Api createApi(Class cla) {
    
    

        Api api = null;
        try {
    
    
            api = (Api) cla.newInstance();
        } catch (Exception e){
    
    
            log.info("Exception:", e);
        }
        return api;
    }
}
/**
 * 客户端
 */
public class Client {
    
    
// 方式1
//    public static void main(String[] args) {
    
    
//        Api api = Factory.createApi(2);
//        api.test1("正在使用简单工厂");
//    }

    public static void main(String[] args) {
    
    
        Api api = Factory.createApi(Impl2.class);
        api.test("正在使用简单工厂");
    }
}

简单工厂模式优点:

帮助封装:简单工厂虽然很简单,但是非常友好地帮助我们实现了组建的封装,让组建外部能真正的面向接口编程
解耦:通过简单功能,实现了客户端和具体实现类的解耦

简单工厂模式缺点:

可能增加客户端的负责度
不方便扩展子工厂

何时选择简单工厂模式:

如果想要完全封装隔离具体实现,让外部只能通过接口来操作封装体,可以选择简单工厂。
如果想要把对外创建对象的职责集中管理和控制,可以选择简单工厂。

おすすめ

転載: blog.csdn.net/qq_39164603/article/details/121548729