简单工厂模式

简单工厂模式(Simple Factory)
    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。(自百度百科)
 
简单工厂模式的UML图
 
简单工厂模式UML图
 
可以看到,简单工厂模式一共有三个角色:
工厂角色:简单工厂角色的核心,包含所有产品的创建逻辑。具体为,获取外部传递的需要创建的产品的信息,从而生产具体的产品,具体生产什么产品,取决于你想生产什么产品,工厂做的只是接收信息,生产具体能够生产的产品就好了。
抽象产品角色:所有产品的父类,描述所有产品的共有特征。
具体产品角色:具体要生产的产品,继承抽象产品,有自己特有的特征,简单工厂的创建目标。
 
简单工厂模式代码实现(以生产手机为例)
抽象产品类
public abstract class Cellphone {
    public abstract void phone();
}
具体产品
//oppo
public class Oppo extends Cellphone{
    @Override
    public void phone() {
        System.out.println("oppo手机");
    }
}
//华为
public class Huawei extends Cellphone{
    @Override
    public void phone() {
        System.out.println("华为手机");
    }
}
//vivo
public class Vivo extends Cellphone {
 
    @Override
    public void phone() {
        System.out.println("vivo手机");
    }
}
工厂类
public class CellphoneFactory {
    public static Cellphone makePhone(String cellphoneName){
        Cellphone cellphone = null;
        switch (cellphoneName) {
        case "vivo":
            cellphone = new Vivo();
            break;
        case "oppo":
            cellphone = new Oppo();
            break;
        case "huawei":
            cellphone = new Huawei();
            break;
        default:
            break;
        }
        return cellphone;
    }
}
客户端调用及结果
public class Client {
    public static void main(String[] args) {
        Cellphone cellphone1 = CellphoneFactory.makePhone("huawei");
        cellphone1.phone();
        
        Cellphone cellphone2 = CellphoneFactory.makePhone("vivo");
        cellphone2.phone();
        
        Cellphone cellphone3 = CellphoneFactory.makePhone("oppo");
        cellphone3.phone();
    }
}

 
简单工厂模式的优缺点分析
优点:工厂类中包含了生产具体产品的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。也就是说,不需要知道具体产品生产的原理,如手机的制作流程,只需要知道自己想要哪种手机,剩下的交给工厂就好了,手机怎么生产出来的,是哪个具体的手机,均与客户端无关,反正它都是手机。
缺点:由于工厂类中包含了所有的产品创建逻辑,一旦这个工厂出现问题不能工作了,那么所有客户端都会受到影响。并且,如果要增加新的产品生产线,不但要增加新的产品实现类,还需要在工厂类中增加产品生产的逻辑判断,这也就意味着对修改开放了,违背了“开放-封闭原则”——对扩展开放,对修改封闭。
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/huiling1809/p/7363448.html