码迷,mamicode.com
首页 > 其他好文 > 详细

工厂模式

时间:2018-08-25 11:32:02      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:ati   stat   测试结果   红色   ctf   sys   private   print   增加   

昨天说好今天写下工厂模式的,主要介绍下简单工厂模式、工厂模式、抽象工厂模式,感觉也不要特别纠结于他们之间的不同,很容易把自己绕晕

简单工厂(通过传入的参数决定调用哪个实现)

定义一个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

 

工厂模式

标签:ati   stat   测试结果   红色   ctf   sys   private   print   增加   

原文地址:https://www.cnblogs.com/hs5201314tx/p/9532597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!