(1)两者之间的共同代码都是创建Shape接口,然后分别创建Circle、Rectangle、Square这三个类,实现shape接口方法即可。
不同之处在创建工厂类上。
简单工厂:只创建一个工厂类
package cn.zyy.design.mode.simpleFactory; publicclass SimpleFactory {
publicstatic Shape getShape(String shape){ switch (shape) { case"Circle": returnnew Circle(); case"Rectangle": returnnew Rectangle(); case"Square": returnnew Square(); default: returnnull; } } } |
客户端只需要调用类的静态方法getShape,并且传入相应的参数,就能实现对应类的对象的创建。
工厂方法:需要创建一个接口(Ifactory)和3个类(RectangleFactory、Circlefactory、SquareFactory)
实现代码:
publicinterface Ifactory { public Shape getShape(); } |
publicclass RectangleFactory implements Ifactory { @Override public Shape getShape() { returnnew Rectangle(); } } |
publicclass Circlefactory implements Ifactory { @Override public Shape getShape() { returnnew Circle(); } } |
publicclass SquareFactory implements Ifactory { @Override public Shape getShape() { returnnew Square(); } } |
跟简单工厂相比,工厂方法在创建对象的工厂类也使用了接口来实现,满足了开闭原则(对扩展开放,对修改关闭),如果需要新增加了shape实现类,那么只需增加一个实现类和一个对应的实现工厂类,原有的代码不需要变动。缺点是客户端需要进行选择使用什么样的工厂类来创建什么样的shape对象。