设计模式 在线

2243抽象工厂模式

下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂。

简单工厂模式

简单工厂模式不是 23 种里的一种,简而言之,就是有一个专门生产某个产品的类。

比如下图中的鼠标工厂,专业生产鼠标,给参数 0,生产戴尔鼠标,给参数 1,生产惠普鼠标。

工厂模式

工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。

戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。

生产哪种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建。

后续直接调用鼠标工厂.生产鼠标()即可

抽象工厂模式

抽象工厂模式也就是不仅生产鼠标,同时生产键盘。

也就是 PC 厂商是个父类,有生产鼠标,生产键盘两个接口。

戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。

创建工厂时,由戴尔工厂创建。

后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。

在抽象工厂模式中,假设我们需要增加一个工厂

假设我们增加华硕工厂,则我们需要增加华硕工厂,和戴尔工厂一样,继承 PC 厂商。

之后创建华硕鼠标,继承鼠标类。创建华硕键盘,继承键盘类即可。

在抽象工厂模式中,假设我们需要增加一个产品

假设我们增加耳麦这个产品,则首先我们需要增加耳麦这个父类,再加上戴尔耳麦,惠普耳麦这两个子类。

之后在PC厂商这个父类中,增加生产耳麦的接口。最后在戴尔工厂,惠普工厂这两个类中,分别实现生产戴尔耳麦,惠普耳麦的功能。以上。

2242工厂模式

接口定义实现类的规范,通过反射工厂类进行生产,完整的一个过程就是。

接口类:

public interface Shape {
   void draw();
}

实现类:

public class Rectangle implements Shape{
   @Override   public void draw() {
      System.out.println("Rectangle");  
   }
}

public class Square implements Shape{
   @Override   public void draw() {
      System.out.println("Square");  
   }
}

工厂类:

public class ShapeFactory{
   public static Shape getClass(Class<?extends Shape> clazz) {
       Shape o = null;     
        try {
          o = (Shape) Class.forName(clazz.getName()).newInstance();       
        } catch (InstantiationException e) {
          e.printStackTrace();       
        } catch (IllegalAccessException e) {
          e.printStackTrace();       
        } catch (ClassNotFoundException e) {
          e.printStackTrace();       
        }
       return o;    
     }
  }
}

给定条件产出:

public class FactoryModeImpl {
   public static void main(String[] args) {
      Shape shape = ShapeFactory.getClass(Square.class);      
      shape.draw();  
   }
}

2241工厂模式

根据上面 @kusirp21 枚举的思路实现的工厂模式:

public enum ShapeType {
    CIRCLE(new Circle()), RECTANGLE(new Rectangle()), SQUARE(new Square());
    private Shape shape;
    private ShapeType(Shape shape) {
        this.shape = shape;
    }

    public Shape getShape() {
        return shape;
    }
}

public class Test {
    public static void main(String[] args) {
        ShapeType.CIRCLE.getShape().draw();
    }
}

2240工厂模式

工厂模式实例:

package 工厂设计模式;

public class Factory_pattern {
    public static void main(String[] args) {
        Factory facortoy = new Factory();
        Person zgr = facortoy.getInstance("zgr");
        zgr.eat();
    }
}

//人类都具有吃方法
interface  Person{
    public void eat();
}

//中国人
class zgr implements Person{

    @Override
        public void eat() {
        System.out.println("中国人吃饭用筷子");
    }
}

//印度人
class ydr implements Person{

    @Override
    public void eat() {
        System.out.println("印度人用手吃饭");
    }
}

//美国人
class mgr implements Person{

    @Override
    public void eat() {
        System.out.println("美国人用刀和叉子吃饭");
    }
}

interface Instance{
    public Person getInstance(String str);
}

class Factory implements Instance{
    @Override
    public Person getInstance(String str) {
        if(str.equals("zgr")) {
            return new zgr();
        }else if(str.equals("ydr")) {
            return new ydr();
        }else if(str.equals("mgr")) {
            return new mgr();
        }else {
            return null;
        }
    }
}

2239工厂模式

一、一句话概括工厂模式

  • 简单工厂:一个工厂类,一个产品抽象类。
  • 工厂方法:多个工厂类,一个产品抽象类。
  • 抽象工厂:多个工厂类,多个产品抽象类。

二、生活中的工厂模式

  • 简单工厂类:一个麦当劳店,可以生产多种汉堡。
  • 工厂方法类:一个麦当劳店,可以生产多种汉堡。一个肯德基店,也可以生产多种汉堡。
  • 抽象工厂类:百胜餐饮集团下有肯德基和百事公司,肯德基生产汉堡,百事公司生成百事可乐。