Java语言 封装创建 简单工厂方法(Simple Factory method)
2017-08-29 09:00
507 查看
我们用下面的例子,重温一下 Shape 系统。
(实现 factory 模式)常用的方法是把 factory 声明为基类的静态方法(staticmethod)。
ShapeFactory.java
factory() 方法需要传入一个参数来决定要创建的 Shape 的具体类型; 在上面的例子里(参数)碰巧是一个字符串(String),它也可以是其它任意类型。当加入新的 Shape 类型的时候(我们假定被创建对象的初始化代码是来自系统以外的,而不是像上面那个例子使用一个硬编码(hard-coded)的数组),系统唯一需要改动的代码就是 factory( )方法。为了促使创建对象的代码只包含在 factory( )方法里,特定类型的 Shape 类的构造函数都被声明为 package 权限,这样一来只有 factory( )方法可以调用这些构造函数,而位于包(package)以外的那部分代码则没有足够的权限(调用这些构造函数)。
(实现 factory 模式)常用的方法是把 factory 声明为基类的静态方法(staticmethod)。
ShapeFactory.java
package com.enfo.wd.factory; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; abstract class Shape{ public abstract void draw(); public abstract void erase(); public static Shape factory(String type){ if(type.equals("Circle")) return new Circle(); if(type.equals("Square")) return new Square(); throw new RuntimeException("Bad shape creation:"+type); } } class Circle extends Shape{ @Override public void draw() { System.out.println("Circle.draw"); } @Override public void erase() { System.out.println("Circle.erase"); } } class Square extends Shape{ @Override public void draw() { System.out.println("Square.draw"); } @Override public void erase() { System.out.println("Square.erase"); } } public class ShapeFactory { String shlist[]={"Circle","Square","Square","Circle","Circle","Square"}; @SuppressWarnings("rawtypes") List shapes=new ArrayList(); @SuppressWarnings({ "unchecked", "rawtypes" }) public void test(){ Iterator it=Arrays.asList(shlist).iterator(); while (it.hasNext()) shapes.add(Shape.factory(it.next().toString())); it=shapes.iterator(); while(it.hasNext()){ Shape s=(Shape) it.next(); s.draw(); s.erase(); } } public static void main(String[] args) { ShapeFactory shape=new ShapeFactory(); shape.test(); } }
factory() 方法需要传入一个参数来决定要创建的 Shape 的具体类型; 在上面的例子里(参数)碰巧是一个字符串(String),它也可以是其它任意类型。当加入新的 Shape 类型的时候(我们假定被创建对象的初始化代码是来自系统以外的,而不是像上面那个例子使用一个硬编码(hard-coded)的数组),系统唯一需要改动的代码就是 factory( )方法。为了促使创建对象的代码只包含在 factory( )方法里,特定类型的 Shape 类的构造函数都被声明为 package 权限,这样一来只有 factory( )方法可以调用这些构造函数,而位于包(package)以外的那部分代码则没有足够的权限(调用这些构造函数)。
相关文章推荐
- 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory
- 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory
- Simple Factory vs. Factory Method vs. Abstract Factory【简单工厂,工厂方法以及抽象工厂的比较】
- iOS 设计模式之简单工厂方法模式(SimpleFactoryMethod)
- 简单工厂方法 SimpleFactoryMethod
- 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory
- 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory
- [创建型模式系列]simple factory & factory method 简单工厂类和工厂方法类的概念及区别
- Java设计模式----------简单工厂类+工厂方法(FactoryMethod)
- Java设计模式圣经连载(02)-工厂方法(Factory Method)模式
- 简单工厂(Simple Factory)模式的Java实现[00原创]
- 3.23种设计模式的Java版--Factory Method(工厂方法)
- 简单工厂,工厂方法(Factory Method),抽象工厂(Abstract Factory)
- JAVA设计模式——简单工厂(Simple Factory)模式
- Java工厂方法---Factory Method
- Factory Method 工厂方法(创建模式) 笔记
- 创建模式之二:工厂方法(Factory Method) 续2
- Java:设计模式之工厂方法(Factory Method)
- 创建模式之二:工厂方法(Factory Method)
- java设计模式之创建型模式-FactoryMethod ( 工厂方法 )