zoukankan      html  css  js  c++  java
  • 设计模式——简单工厂方法模式

    简单工厂模式:又称静态工厂方法模式,就是有一个专门生产某个产品的类。定义一个工厂类和方法(一般为静态方法),该方法根据参数创建不同产品。

             1) 工厂类角色:这是本模式的核心,定义一个方法,该方法根据参数来创建不同产品
             2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。         
             3) 具体产品角色:工厂类所创建的对象就是此角色的实例,由一个具体类实现。

    例子一  使用静态方法,工厂类创建不同的面条

    角色:抽象产品角色  抽象类

    1 package com.test.factory;
    2 
    3 public abstract class Noodle {
    4     public abstract void description();
    5 }

    角色:具体的不同产品 牛肉面

    1 package com.test.factory;
    2 
    3 public class NrNoodle extends Noodle {
    4     @Override
    5     public void description() {
    6         System.out.println("来一碗牛肉面");
    7     }
    8 }

    角色:具体的不同产品 热干面

    1 package com.test.factory;
    2 
    3 public class RgNoodle extends Noodle {
    4     @Override
    5     public void description() {
    6         System.out.println("来一碗热干面");
    7     }
    8 }

    角色:具体的不同产品 兰州拉面

    1 package com.test.factory;
    2 
    3 public class LzNoodle extends Noodle {
    4     @Override
    5     public void description() {
    6         System.out.println("来一碗兰州拉面");
    7     }
    8 }

    角色:简单工厂类

     1 package com.test.factory;
     2 
     3 public class SimpleNoodleFactory {
     4     public static final int LzNoodle = 1;
     5     public static final int RgNoodle = 2;
     6     public static final int NrNoodle = 3;
     7 
     8     public static Noodle createNoodle(int type){
     9         switch (type){
    10             case LzNoodle:
    11                 return new LzNoodle();
    12             case RgNoodle:
    13                 return new RgNoodle();
    14             case NrNoodle:
    15                 return new NrNoodle();
    16             default:
    17                 return null;
    18         }
    19     }
    20 }

    测试。用户可以根据需求点牛肉面或者热干面

     1 package com.test.factory;
     2 
     3 public class SimpleFactoryTest {
     4     public static void main(String[] args){
     5         Noodle myNoodle = SimpleNoodleFactory.createNoodle(SimpleNoodleFactory.LzNoodle);
     6         if (myNoodle != null) {
     7             myNoodle.description();
     8         }
     9         myNoodle = SimpleNoodleFactory.createNoodle(SimpleNoodleFactory.NrNoodle);
    10         if (myNoodle != null) {
    11             myNoodle.description();
    12         }
    13     }
    14 }

    测试结果

    例子二 不使用静态方法

    角色:抽象产品角色  接口

    1 package com.test.factory1;
    2 
    3 public interface Shape {
    4     public abstract void draw();
    5 }

    角色:具体的不同产品1

    1 package com.test.factory1;
    2 
    3 public class Square implements Shape {
    4     @Override
    5     public void draw() {
    6         System.out.println("I am square.");
    7     }
    8 }

    角色:具体的不同产品2

    1 package com.test.factory1;
    2 
    3 public class Rectangle implements Shape {
    4     @Override
    5     public void draw() {
    6         System.out.println("I am rectangle.");
    7     }
    8 }

    角色:具体的不同产品3

    1 package com.test.factory1;
    2 
    3 public class Circle implements Shape {
    4     @Override
    5     public void draw() {
    6         System.out.println("I am circle.");
    7     }
    8 }

    角色:简单工厂类

     1 package com.test.factory1;
     2 
     3 
     4 public class SimpleFactory {
     5 
     6     public Shape getShape(String type){
     7         switch (type){
     8             case "square":
     9                 return new Square();
    10             case "circle":
    11                 return new Circle();
    12             case "rectangle":
    13                 return new Rectangle();
    14             default:
    15                 return new Rectangle();
    16         }
    17     }
    18 }

    测试

     1 package com.test.factory1;
     2 
     3 public class SimpleFactoryTest {
     4     public static void main(String[] args){
     5         SimpleFactory sf = new SimpleFactory();
     6         sf.getShape("circle").draw();
     7         sf.getShape("rectangle").draw();
     8         sf.getShape("square").draw();
     9     }
    10 }

    测试结果

  • 相关阅读:
    springmvc返回视图或当api
    springmvc初始注解案例
    @RequestMapping的属性、缩写
    struts初始案例
    2020-3-5所思所想
    使用selenium学习
    spring链接数据库与事务等实际运用再加
    spring的aop
    ubuntu安装docker
    java内存区域和内存溢出异常
  • 原文地址:https://www.cnblogs.com/0820LL/p/9592882.html
Copyright © 2011-2022 走看看