工厂模式
Posted hs5201314tx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂模式相关的知识,希望对你有一定的参考价值。
昨天说好今天写下工厂模式的,主要介绍下简单工厂模式、工厂模式、抽象工厂模式,感觉也不要特别纠结于他们之间的不同,很容易把自己绕晕
简单工厂(通过传入的参数决定调用哪个实现)
定义一个shape接口,有draw()方法, Circle Rectangle分别实现shape接口
public interface Shape { public void draw(); }
1 public class Rectangle implements Shape { 2 3 @Override 4 public void draw() { 5 System.out.println("draw Rectangle"); 6 7 } 8 9 }
public class Circle implements Shape { @Override public void draw() { System.out.println("draw Circle"); }
工厂类(这里用了单例模式创造工厂)
public class ShapeFactory { private static ShapeFactory sf; private ShapeFactory(){}; public static ShapeFactory getInstance(){ if(sf == null){ sf = new ShapeFactory(); } return sf; } public Shape getShape(String shapeType){ if(shapeType == null){ return null; } if(shapeType.equals("circle")){ return new Circle(); } if(shapeType.equals("rectangle")){ return new Rectangle(); } return null; } }
测试类
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub ShapeFactory sf = ShapeFactory.getInstance(); Shape s = sf.getShape("circle"); s.draw(); } }
测试结果:draw Circle
工厂模式(不需要参数决定)
shapeFactory不设计成class,设计为Abstract class或者interface 由具体的CircleFactory 或者 RectangleFactory来决定实现哪个工厂 创造哪个形状
public interface ShapeFactory { public Shape getShape(); }
public class CircleFactory implements ShapeFactory{ @Override public Shape getShape() { return new Circle(); } }
public static void factory(){ ShapeFactory sf = new CircleFactory(); Shape s = sf.getShape(); s.draw(); }
测试结果:draw Circle
抽象工厂模式:增加了产品 不再只有Shape 还有Color interface Red/Green 分别实现,嫌麻烦粘在一起了
public interface Color { public void fill(); } //Red实现 public class Red implements Color { @Override public void fill() { System.out.println("fill Red"); } } //Green实现 public class Green implements Color { @Override public void fill() { System.out.println("fill Green"); } }
抽象工厂
public interface AbstractFactory { public Shape getShape(); public Color getColor(); }
生产红色的圆
public class RedCircleFactory implements AbstractFactory { public Shape getShape() { return new Circle(); } public Color getColor() { // TODO Auto-generated method stub return new Red(); } }
测试类就不写 很简单 ,菜鸟教程:http://www.runoob.com/design-pattern/abstract-factory-pattern.html
以上是关于工厂模式的主要内容,如果未能解决你的问题,请参考以下文章
设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )