工厂模式

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

 

以上是关于工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式工厂方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式-简单工厂工厂方法模式抽象工厂模式详解

C++工厂模式(简单工厂工厂方法抽象工厂)