1.简单工厂模式
简单工厂模式(Smple Factory Pattern) 是指有一个工厂对象决定创建出哪一种产品的实例
适用于工厂类创建实例对象较少的情况.调用时只需传入参数即可
image.png
/**
* Description:水果接口
*
* @date 2019-04-26 11:27
*/
public interface IFruits {
/**
* Description:获取水果名称
* @Date 2019-04-26 11:28
* @Param []
* @return java.lang.String
**/
String getName();
}
/**
* Description:苹果类
*
* @date 2019-04-26 11:29
*/
public class Apple implements IFruits{
public String getName() {
return "苹果";
}
}
/**
* Description:水果工厂
*
* @date 2019-04-26 11:30
*/
public class FruitsFactory {
public static IFruits produce(Class type){
IFruits fruits = null;
try {
fruits = (IFruits) Class.forName(type.getName()).newInstance();
} catch (InstantiationException e) {
System.out.println("抽象类或接口");
} catch (IllegalAccessException e) {
System.out.println("私有对象");
} catch (ClassNotFoundException e) {
System.out.println("类不存在");
}
return fruits;
}
//测试
public static void main(String[] args) {
IFruits fruits = FruitsFactory.produce(com.sky.designpattern.simplefactory.Apple.class);
System.out.println(fruits == null?"":fruits.getName());
}
}
2.工厂方法模式
工厂方法模式(Factory Method Pattern) 是指定一个创建对象的接口
但实际上对象的创建过程由接口的实现类负责,将类的实例化推迟到实现类中
image.png
/**
* Description:水果接口
*
* @date 2019-04-26 11:27
*/
public interface IFruits {
/**
* Description:获取水果名称
* @Date 2019-04-26 11:28
* @Param []
* @return java.lang.String
**/
String getName();
}
/**
* Description:苹果类
*
* @date 2019-04-26 11:29
*/
public class Apple implements IFruits{
public String getName() {
return "苹果";
}
}
/**
* Description:香蕉类
*
* @date 2019-04-26 11:29
*/
public class Banana implements IFruits{
public String getName() {
return "香蕉";
}
}
/**
* Description:水果工厂接口
*
* @date 2019-04-26 11:30
*/
public interface IFruitsFactory {
IFruits produce();
}
/**
* Description:苹果工厂
*
* @date 2019-04-26 11:48
*/
public class AppleFactory implements IFruitsFactory {
@Override
public IFruits produce() {
return new Apple();
}
}
/**
* Description:香蕉工厂
*
* @date 2019-04-26 11:48
*/
public class BananaFactory implements IFruitsFactory {
@Override
public IFruits produce() {
return new Banana();
}
}
实际使用中工厂可采用spring注入,返回结果可采用泛型
/**
* Description:水果工厂接口
*
* @date 2019-04-26 11:30
*/
public interface IFruitsFactory<T extends IFruits> {
T produce();
}
/**
* Description:苹果工厂
*
* @date 2019-04-26 11:48
*/
public class AppleFactory implements IFruitsFactory {
@Override
public Apple produce() {
return new Apple();
}
}
/**
* Description:香蕉工厂
*
* @date 2019-04-26 11:48
*/
public class BananaFactory implements IFruitsFactory {
@Override
public Banana produce() {
return new Banana();
}
}
3.抽象工厂模式
image.png/**
* Description:水果接口
*
* @date 2019-04-26 14:21
*/
public interface IFruits {
String getName();
String getBrand();
}
/**
* Description:红富士苹果类
*
* @date 2019-04-26 14:23
*/
public class HongFushiApple implements IFruits{
@Override
public String getName() {
return "苹果";
}
@Override
public String getBrand() {
return "红富士";
}
}
/**
* Description:红富士香蕉类
*
* @date 2019-04-26 14:23
*/
public class HongFushiBanana implements IFruits{
@Override
public String getName() {
return "香蕉";
}
@Override
public String getBrand() {
return "红富士";
}
}
/**
* Description:黄元帅苹果类
*
* @date 2019-04-26 14:23
*/
public class HuangYuanShuaiApple implements IFruits{
@Override
public String getName() {
return "苹果";
}
@Override
public String getBrand() {
return "黄元帅";
}
}
/**
* Description:黄元帅香蕉类
*
* @date 2019-04-26 14:23
*/
public class HuangYuanShuaiBanana implements IFruits{
@Override
public String getName() {
return "香蕉";
}
@Override
public String getBrand() {
return "黄元帅";
}
}
/**
* Description:红富士水果工厂
*
* @date 2019-04-26 14:16
*/
public class HongFuShiFactory implements IFruitsFactory {
@Override
public IFruits produceApple() {
return new HongFushiApple();
}
@Override
public IFruits produceBanana() {
return new HuangYuanShuaiBanana();
}
}
/**
* Description:黄元帅水果工厂
*
* @date 2019-04-26 14:16
*/
public class HuangYuanShuaiFactory implements IFruitsFactory {
@Override
public IFruits produceApple() {
return new HuangYuanShuaiApple();
}
@Override
public IFruits produceBanana() {
return new HongFushiBanana();
}
}
网友评论