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 }

    测试结果

  • 相关阅读:
    Power BI for Office 365(八)共享查询
    Power BI for Office 365(七) Power BI站点
    Power BI for Office 365(六)Power Map简介
    Power BI for Office 365(五)Power View第二部分
    Power BI for Office 365(四)Power View第一部分
    Power BI for Office 365(三)Power Pivot
    Power BI for Office 365(二)Power Query
    java 继承、重载、重写与多态
    Android 热修复方案Tinker(一) Application改造
    阿里最新热修复Sophix与QQ超级补丁和Tinker的实现与总结
  • 原文地址:https://www.cnblogs.com/0820LL/p/9592882.html
Copyright © 2011-2022 走看看