设计模式——简单工厂方法模式

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

         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 }

测试结果

 

posted on 2018-09-05 16:26  0820LL  阅读(174)  评论(0编辑  收藏  举报

导航