工厂方法模式(Java)
下面是关于我所写的所有设计模式代码(还是建议自己手打或者想一个别的例子练习一次)
(https://github.com/lihang212010/DesignPatterns-/tree/master/designpatterns/src)
老规矩先一张正规UML
接下来是我举的例子
mV0L3dlaXhpbl80MzQ4NjgwNA==,size_16,color_FFFFFF,t_70)还是生产红色黑色笔这个例子,代码在下面,很好理解,建议先看代码,大佬除外。
在这里我们去掉了简单工厂模式,给每一个生产子类做一个工厂,然后工厂指向生产类,这样我们需要修改为黑色签字笔只需要修改主方法而不用修改封闭的代码,不违反封闭-开放原则(通常意义我们修改主方法中代码不属于违背封闭-开放原则)
工厂模式的运用很多,正规的产品(会更新)都会使用这个设计模式,比如QQ,王者荣耀,DNF等等。
生产类
public class Factory {
public void GetResult() {
System.out.println("工厂生产签字笔");
}
}
红色签字笔类
public class RedCreate extends Factory{
@Override
public void GetResult() {
System.out.println("工厂生产红色签字笔");
}
}
黑色签字笔类
@Override
public void GetResult() {
System.out.println("工厂生产黑色签字笔");
}
}
虚拟工厂类
public interface AbstractFactory {
Factory create();
}
黑色签字笔工厂
public class BlackFactory implements AbstractFactory{
@Override
public Factory create() {
// TODO Auto-generated method stub
return new BlackCreate();
}
}
红色签字笔工厂
public class RedFactory implements AbstractFactory {
@Override
public Factory create() {
return new RedCreate();
}
}
主方法
public class Main {
public static void main(String[] args) {
AbstractFactory factory=new RedFactory();
Factory c=factory.create();
c.GetResult();
}
}
结果是输出 工厂生产红色签字笔