您的位置:首页 > 其它

设计模式 --简单工厂模式

2018-02-07 23:59 295 查看
一、定义

简单工厂模式,依据传入的参数,生成对应的具体产品对象。简单工厂模式属于创建型模式,又称为静态工厂方法模式,但不属于23种模式之一。

二、要点

工厂方法一般设为静态方法;

返回值一般是是抽象类或者接口;

具体的产品类一般继承或实现抽象类、接口。

三、类图



四、简单工厂模式代码

1、Product类:抽象产品类,负责定义产品的共性

package simpleFactory;

/**
* 抽象产品类,负责定义产品的共性
*/
public abstract class Product {
private String attribute;

public void method1(){
System.out.println("Product do something!");
}

public abstract void method2();
}


2、ConcreteProduct1类:具体产品类

package simpleFactory;

/**
* 具体产品类
*/
public class ConcreteProduct1 extends Product {

public void method2(){
System.out.println("ConcreteProduct1 do something!");
}
}


3、ConcreteProduct2类:具体产品类

package simpleFactory;

/**
* 具体产品类
*/
public class ConcreteProduct2 extends Product {

public void method2(){
System.out.println("ConcreteProduct2 do something!");
}
}


4、ConcreteFactory类:具体工厂类

package simpleFactory;

/**
* 具体的工厂类
*/
public class ConcreteFactory {
public static <T extends Product> T createProduct(Class<T> c){
//定义产品类
Product product = null;
try{
//产生一个具体的产品类
product = (Product) Class.forName(c.getName()).newInstance();
}catch (Exception e){
e.printStackTrace();
}
return (T)product;
}
}


5、 Client类:测试类

package simpleFactory;

/**
* @auther fenghui
* @create 2018/2/2.
*/
public class Client {
public static void main(String[] args) {
//创建第一个具体的产品
Product concreteProduct1 = ConcreteFactory.createProduct(ConcreteProduct1.class);
concreteProduct1.method1();
concreteProduct1.method2();

//创建第二个具体的产品
Product concreteProduct2 = ConcreteFactory.createProduct(ConcreteProduct2.class);
concreteProduct2.method1();
concreteProduct2.method2();
}
}


五、优缺点

优点:使用者不需要关系产品类的创建过程,与产品的实现类解耦;

缺点:工厂类的扩展比较困难
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: