软件编程
位置:首页>> 软件编程>> java编程>> Java设计模式之工厂模式案例详解

Java设计模式之工厂模式案例详解

作者:温故知新之java  发布时间:2023-11-27 20:08:03 

标签:Java,设计模式,工厂模式

Java设计模式之工厂模式案例详解

分类

1.简单工厂模式

2.工厂方法模式

3.抽象工厂模式

案例

需求

根据蛋糕的不同口味,分别创建苹果味和香蕉味的蛋糕实例

方案一:简单工厂模式

定义蛋糕父类

/**
* 蛋糕
* @author:liyajie
* @createTime:2022/2/14 10:17
* @version:1.0
*/
public class Cake {
}

定义苹果味的蛋糕

/**
* 苹果蛋糕
* @author:liyajie
* @createTime:2022/2/14 10:17
* @version:1.0
*/
public class AppleCake extends Cake{
   public AppleCake(){
       System.out.println("创建了苹果蛋糕实例");
   }
}

定义香蕉味的蛋糕

/**
* 香蕉蛋糕
* @author:liyajie
* @createTime:2022/2/14 10:17
* @version:1.0
*/
public class BananaCake extends Cake{
   public BananaCake(){
       System.out.println("创建了香蕉蛋糕实例");
   }
}

定义蛋糕工厂类

/**
* 蛋糕工厂
* @author:liyajie
* @createTime:2022/2/14 10:16
* @version:1.0
*/
public class CakeFactory {

public Cake createCake(String type){
       if("apple".equals(type)){
           return new AppleCake();
       }else if("banana".equals(type)){
           return new BananaCake();
       }else {
           return null;
       }
   }
}

定义测试类

/**
* 测试类
* @author:liyajie
* @createTime:2022/2/14 10:25
* @version:1.0
*/
public class Test {
   public static void main(String[] args) {
       CakeFactory cakeFactory = new CakeFactory();
       cakeFactory.createCake("apple");
       cakeFactory.createCake("banana");
   }
}

查看结果:

Java设计模式之工厂模式案例详解

方案二:工厂方法模式

定义蛋糕父类

/**
* 蛋糕父类
* @author:liyajie
* @createTime:2022/2/14 10:44
* @version:1.0
*/
public abstract class Cake {

}

定义苹果蛋糕

/**
* 苹果蛋糕
* @author:liyajie
* @createTime:2022/2/14 10:17
* @version:1.0
*/
public class AppleCake extends Cake {
   public AppleCake(){
       System.out.println("创建了苹果蛋糕实例");
   }
}

定义香蕉蛋糕

/**
* 香蕉蛋糕
* @author:liyajie
* @createTime:2022/2/14 10:17
* @version:1.0
*/
public class BananaCake extends Cake {
   public BananaCake(){
       System.out.println("创建了香蕉蛋糕实例");
   }
}

定义蛋糕工厂类 该类主要是定义了createCake抽象方法,并且在无参构造函数中进行调用,具体的实现是在子类里进行实例化的

/**
* 蛋糕工厂类
* @author:liyajie
* @createTime:2022/2/14 11:55
* @version:1.0
*/
public abstract class CakeFactory {

abstract Cake createCake();

public CakeFactory() {
       createCake();
   }
}

定义苹果蛋糕工具类

/**
* @desc:
* @author:liyajie
* @createTime:2022/2/14 11:58
* @version:1.0
*/
public class AppleCakeFactory extends CakeFactory{

@Override
   public Cake createCake() {
       return new AppleCake();
   }
}

定义香蕉蛋糕工具类

/**
* @desc:
* @author:liyajie
* @createTime:2022/2/14 11:58
* @version:1.0
*/
public class BananaCakeFactory extends CakeFactory{
   @Override
   public Cake createCake() {
       return new BananaCake();
   }
}

定义测试类

/**
* 测试类
* @author:liyajie
* @createTime:2022/2/14 12:02
* @version:1.0
*/
public class Test {
   public static void main(String[] args) {
       AppleCakeFactory appleCakeFactory = new AppleCakeFactory();

BananaCakeFactory bananaCakeFactory = new BananaCakeFactory();
   }
}

查看结果

Java设计模式之工厂模式案例详解

方案三:抽象工厂模式

定义蛋糕父类

/**
* @desc:
* @author:liyajie
* @createTime:2022/2/14 10:44
* @version:1.0
*/
public abstract class Cake {

}

定义苹果蛋糕

/**
* 苹果蛋糕
* @author:liyajie
* @createTime:2022/2/14 10:17
* @version:1.0
*/
public class AppleCake extends Cake {
   public AppleCake(){
       System.out.println("创建了苹果蛋糕实例");
   }
}

定义香蕉蛋糕

/**
* 香蕉蛋糕
* @author:liyajie
* @createTime:2022/2/14 10:17
* @version:1.0
*/
public class BananaCake extends Cake {
   public BananaCake(){
       System.out.println("创建了香蕉蛋糕实例");
   }
}

定义蛋糕工厂类

/**
* @desc:
* @author:liyajie
* @createTime:2022/2/14 11:55
* @version:1.0
*/
public interface CakeFactory {

Cake createCake();
}

定义苹果蛋糕工厂类

/**
* @desc:
* @author:liyajie
* @createTime:2022/2/14 11:58
* @version:1.0
*/
public class AppleCakeFactory implements CakeFactory {

@Override
   public Cake createCake() {
       return new AppleCake();
   }
}

定义香蕉蛋糕工厂类

/**
* @desc:
* @author:liyajie
* @createTime:2022/2/14 11:58
* @version:1.0
*/
public class BananaCakeFactory implements CakeFactory {
   @Override
   public Cake createCake() {
       return new BananaCake();
   }
}

定义蛋糕工厂生成器

/**
* @desc:
* @author:liyajie
* @createTime:2022/2/14 17:46
* @version:1.0
*/
public class FactoryProducter {

CakeFactory cakeFactory;

public FactoryProducter(CakeFactory cakeFactory){
       setCakeFactory(cakeFactory);
   }

public void setCakeFactory(CakeFactory cakeFactory){
       this.cakeFactory = cakeFactory;
       cakeFactory.createCake();
   }
}

定义测试类

/**
* 测试类
* @author:liyajie
* @createTime:2022/2/14 12:02
* @version:1.0
*/
public class Test {
   public static void main(String[] args) {
       new FactoryProducter(new AppleCakeFactory());
       new FactoryProducter(new BananaCakeFactory());
   }
}

查看结果

Java设计模式之工厂模式案例详解

对比分析

  • 方案一:简单工厂模式,工厂类是只有一个,只需要改动这一个地方 避免了业务逻辑的代码和创建对象的代码大量耦合,降低耦合 让代码更加条理清晰,更加优雅

  • 方案二:工厂方法模式是简单工厂模式的衍生,定义一个创建对象的抽象方法,由子类决定要实例化的类,将对象实例化延迟到子类,实现了可扩展,层次结构更复杂,可以应用到更复杂的场合

  • 方案三:抽象工厂模式,定义一个接口来用于创建相关的或者具有依赖关系的对象簇,将实例化对象的细节提取出来,放到工厂角色,由工厂角色负责具体的创建细节,解耦合,提高项目可扩展性和可维护性

来源:https://juejin.cn/post/7064506001608671246

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com