Java 设计模式之工厂模式(j简单工厂、工厂方法、抽象工厂)

  1. * @author ThinkPad

  2. *

  3. */

  4. public abstract class  IceCreamFactory {

  5. /**

  6. * 抽象的生产冰淇淋方法

  7. * @return

  8. */

  9. protected abstract  IceCream produceIceCream();

  10. }

package com.factorymethod.test;

/**

  • 抽象冰淇淋工厂类

  • @author ThinkPad

*/

public abstract class IceCreamFactory {

/**

  • 抽象的生产冰淇淋方法

  • @return

*/

protected abstract IceCream produceIceCream();

}

3、苹果口味的冰淇淋工厂 AppleIceCreamFactory.java

[java] view plain copy

print ?

  1. package  com.factorymethod.test;

  2. /**

  3. * 苹果口味的冰淇淋工厂

  4. * @author ThinkPad

  5. *

  6. */

  7. public class AppleIceCreamFactory extends IceCreamFactory {

  8. @Override

  9. protected IceCream produceIceCream() {

  10. // TODO 自动生成的方法存根

  11. return new AppleIceCream();

  12. }

  13. }

package com.factorymethod.test;

/**

  • 苹果口味的冰淇淋工厂

  • @author ThinkPad

*/

public class AppleIceCreamFactory extends IceCreamFactory {

@Override

protected IceCream produceIceCream() {

// TODO 自动生成的方法存根

return new AppleIceCream();

}

}

**

4、香蕉口味的冰淇淋工厂  BananaIceCreamFactory.java**

[java] view plain copy

print ?

  1. package com.factorymethod.test;

  2. /**

  3. * 香蕉口味的冰淇淋工厂

  4. * @author ThinkPad

  5. *

  6. */

  7. public class BananaIceCreamFactory extends IceCreamFactory {

  8. @Override

  9. protected IceCream produceIceCream() {

  10. // TODO 自动生成的方法存根

  11. return new BananaIceCream();

  12. }

  13. }

package com.factorymethod.test;

/**

  • 香蕉口味的冰淇淋工厂

  • @author ThinkPad

*/

public class BananaIceCreamFactory extends IceCreamFactory {

@Override

protected IceCream produceIceCream() {

// TODO 自动生成的方法存根

return new BananaIceCream();

}

}

5、草莓口味的冰淇淋工厂 StrawberryIceCreamFactory.java

[java] view plain copy

print ?

  1. package com.factorymethod.test;

  2. /**

  3. * 草莓口味的冰淇淋工厂

  4. * @author ThinkPad

  5. *

  6. */

  7. public class StrawberryIceCreamFactory extends IceCreamFactory {

  8. @Override

  9. protected IceCream produceIceCream() {

  10. // TODO 自动生成的方法存根

  11. return new  StrawberryIceCream();

  12. }

  13. }

package com.factorymethod.test;

/**

  • 草莓口味的冰淇淋工厂

  • @author ThinkPad

*/

public class StrawberryIceCreamFactory extends IceCreamFactory {

@Override

protected IceCream produceIceCream() {

// TODO 自动生成的方法存根

return new StrawberryIceCream();

}

}

6、客户端示例

[java] view plain copy

print ?

  1. package  com.factorymethod.test;

  2. /**

  3. * 客户端示例

  4. * @author ThinkPad

  5. *

  6. */

  7. public class  Console {

  8. public static void  main(String[] args) {

  9. // TODO 自动生成的方法存根

  10. // 要草莓味的冰淇淋

  11. IceCream c1 =  new  StrawberryIceCreamFactory().produceIceCream();

  12. c1.taste();

  13. // 要香蕉味的冰淇淋

  14. IceCream c2 =  new  BananaIceCreamFactory().produceIceCream();

  15. c2.taste();

  16. }

  17. }

package com.factorymethod.test;

/**

  • 客户端示例

  • @author ThinkPad

*/

public class Console {

public static void main(String[] args) {

// TODO 自动生成的方法存根

// 要草莓味的冰淇淋

IceCream c1 = new StrawberryIceCreamFactory().produceIceCream();

c1.taste();

// 要香蕉味的冰淇淋

IceCream c2 = new BananaIceCreamFactory().produceIceCream();

c2.taste();

}

}

那么,你应该猜到了,这就是个工厂方法模式的实例喽!该例的UML图如下:

四、冰淇淋升级了:国产奶油和进口奶油

=======================================================================================

冰淇淋的生意越来越好了,商城又在原料上动起了心思。在很多人的观念中,进口的东西总是要比国产的好(插一句,很多洋品牌在华销售的质量啊、卫生等标准要比国际标准低的多,因为中国的标准要求本来就低,而且中国人心理承受能力强、好骗~)。商城原先的冰淇淋原料都是国产的,现在它决定把一部分产品的奶油用进口的奶油取代,进口奶油制作的冰淇淋价格稍高一些,顾客可以自行选择。

那么,商城应该怎样做呢?它当然可以再为每种口味的冰淇淋造一套相应的机器(用进口奶油来生产的机器,我们假设原先的机器是用国产奶油来生产的),也就是说仍然使用上面的“工厂方法模式”。可是,这样一来,商城就要新造原来一倍的机器(工厂类)了。倘若,商城是从原来的那一套切换到现在的生产国产、进口奶油冰淇淋的这一套,那么倒也没什么。毕竟,它只需要再加一些机器即可,不用做其它的改造。

倘若,商城一开始就规划了生产国产、进口奶油的冰淇淋呢?也就是说,它现在是第一次设计它的冰淇淋生产系统。那么,下面这样做也许更好:

1、国产奶油冰淇淋接口   DomesticIceCream.java

[java] view plain copy

print ?

  1. package com.abstractfactory.test;

  2. /**

  3. * 国产奶油冰淇淋接口

  4. * @author ThinkPad

  5. *

  6. */

  7. public interface DomesticIceCream {

  8. /**

  9. * taste 方法 表明是哪种口味

  10. */

  11. public void taste();

  12. }

package com.abstractfactory.test;

/**

  • 国产奶油冰淇淋接口

  • @author ThinkPad

*/

public interface DomesticIceCream {

/**

  • taste 方法 表明是哪种口味

*/

public void taste();

}

2、进口奶油冰淇淋接口  ImportedIceCream.java

[java] view plain copy

print ?

  1. package com.abstractfactory.test;

  2. /**

  3. * 进口奶油冰淇淋接口

  4. * @author ThinkPad

  5. *

  6. */

  7. public interface ImportedIceCream {

  8. /**

  9. * taste 方法 表明是哪种口味

  10. */

  11. public void taste();

  12. }

package com.abstractfactory.test;

/**

  • 进口奶油冰淇淋接口

  • @author ThinkPad

*/

public interface ImportedIceCream {

/**

  • taste 方法 表明是哪种口味

*/

public void taste();

}

3、苹果口味的冰淇淋(国产奶油)  AppleDomesticIceCream.java

[java] view plain copy

print ?

  1. package com.abstractfactory.test;

  2. /**

  3. * 苹果口味的冰淇淋(国产奶油)

  4. * @author ThinkPad

  5. *

  6. */

  7. public class AppleDomesticIceCream implements DomesticIceCream {

  8. @Override

  9. public void taste() {

  10. // TODO 自动生成的方法存根

  11. System.out.println(”苹果口味的冰淇淋(国产奶油)”);

  12. }

  13. }

package com.abstractfactory.test;

/**

  • 苹果口味的冰淇淋(国产奶油)

  • @author ThinkPad

*/

public class AppleDomesticIceCream implements DomesticIceCream {

@Override

public void taste() {

// TODO 自动生成的方法存根

System.out.println(“苹果口味的冰淇淋(国产奶油)”);

}

}

**

4、苹果口味的冰淇淋(进口奶油)  AppleImportedIceCream.java**

[java] view plain copy

print ?

  1. package com.abstractfactory.test;

  2. /**

  3. * 苹果口味的冰淇淋(进口奶油)

  4. * @author ThinkPad

  5. *

  6. */

  7. public class AppleImportedIceCream implements ImportedIceCream {

  8. @Override

  9. public void taste() {

  10. // TODO 自动生成的方法存根

  11. System.out.println(”苹果口味的冰淇淋(进口奶油)”);

  12. }

  13. }

package com.abstractfactory.test;

/**

  • 苹果口味的冰淇淋(进口奶油)

  • @author ThinkPad

*/

public class AppleImportedIceCream implements ImportedIceCream {

@Override

public void taste() {

// TODO 自动生成的方法存根

System.out.println(“苹果口味的冰淇淋(进口奶油)”);

}

}

5、香蕉口味的冰淇淋(国产奶油)  BananaDomesticIceCream.java

[java] view plain copy

print ?

  1. package com.abstractfactory.test;

  2. /**

  3. * 香蕉口味的冰淇淋(国产奶油)

  4. * @author ThinkPad

  5. *

  6. */

  7. public class BananaDomesticIceCream implements DomesticIceCream {

  8. @Override

  9. public void taste() {

  10. // TODO 自动生成的方法存根

  11. System.out.println(”香蕉口味的冰淇淋(国产奶油)”);

  12. }

  13. }

package com.abstractfactory.test;

/**

  • 香蕉口味的冰淇淋(国产奶油)

  • @author ThinkPad

*/

public class BananaDomesticIceCream implements DomesticIceCream {

@Override

public void taste() {

// TODO 自动生成的方法存根

System.out.println(“香蕉口味的冰淇淋(国产奶油)”);

}

}

6、香蕉口味的冰淇淋(进口奶油)  BananaImportedIceCream.java

[java] view plain copy

print ?

  1. package com.abstractfactory.test;

  2. /**

  3. * 香蕉口味的冰淇淋(进口奶油)

  4. * @author ThinkPad

  5. *

  6. */

  7. public class BananaImportedIceCream implements ImportedIceCream {

  8. @Override

  9. public void taste() {

  10. // TODO 自动生成的方法存根

  11. System.out.println(”香蕉口味的冰淇淋(进口奶油)”);

  12. }

  13. }

package com.abstractfactory.test;

/**

  • 香蕉口味的冰淇淋(进口奶油)

  • @author ThinkPad

*/

public class BananaImportedIceCream implements ImportedIceCream {

@Override

public void taste() {

// TODO 自动生成的方法存根

System.out.println(“香蕉口味的冰淇淋(进口奶油)”);

}

}

7、草莓口味的冰淇淋(国产奶油)  StrawberryDomesticIceCream.java

[java] view plain copy

print ?

  1. package com.abstractfactory.test;

  2. /**

  3. * 草莓口味的冰淇淋(国产奶油)

  4. * @author ThinkPad

  5. *

  6. */

  7. public class StrawberryDomesticIceCream implements DomesticIceCream {

  8. @Override

  9. public void taste() {

  10. // TODO 自动生成的方法存根

  11. System.out.println(”草莓口味的冰淇淋(国产奶油)”);

  12. }

  13. }

package com.abstractfactory.test;

/**

  • 草莓口味的冰淇淋(国产奶油)

  • @author ThinkPad

*/

public class StrawberryDomesticIceCream implements DomesticIceCream {

@Override

public void taste() {

// TODO 自动生成的方法存根

System.out.println(“草莓口味的冰淇淋(国产奶油)”);

}

}

**

8、草莓口味的冰淇淋(进口奶油) StrawberryImportedIceCream.java**

[java] view plain copy

print ?

  1. package com.abstractfactory.test;

  2. /**

  3. * 草莓口味的冰淇淋(进口奶油)

  4. * @author ThinkPad

  5. *

  6. */

  7. public class StrawberryImportedIceCream implements ImportedIceCream {

  8. @Override

  9. public void taste() {

  10. // TODO 自动生成的方法存根

  11. System.out.println(”草莓口味的冰淇淋(进口奶油)”);

  12. }

  13. }

package com.abstractfactory.test;

/**

  • 草莓口味的冰淇淋(进口奶油)

  • @author ThinkPad

*/

public class StrawberryImportedIceCream implements ImportedIceCream {

@Override

public void taste() {

// TODO 自动生成的方法存根

System.out.println(“草莓口味的冰淇淋(进口奶油)”);

}

}

9、抽象的冰淇淋工厂类  IceCreamFactory.java

[java] view plain copy

print ?

  1. package com.abstractfactory.test;

  2. /**

  3. * 抽象的冰淇淋工厂类

  4. * @author ThinkPad

  5. *

  6. */

  7. public abstract class IceCreamFactory {

  8. /**

  9. * 生产国产奶油冰淇淋

  10. */

  11. public abstract DomesticIceCream produceDomesticIceCream();

  12. /**

  13. * 生产进口奶油冰淇淋

  14. */

  15. public abstract ImportedIceCream produceImportedIceCream();

  16. }

package com.abstractfactory.test;

/**

  • 抽象的冰淇淋工厂类

  • @author ThinkPad

*/

public abstract class IceCreamFactory {

/**

  • 生产国产奶油冰淇淋

*/

public abstract DomesticIceCream produceDomesticIceCream();

/**

  • 生产进口奶油冰淇淋

*/

public abstract ImportedIceCream produceImportedIceCream();

}

10、苹果味冰淇淋工厂类   AppleIceCreamFactory.java

[java] view plain copy

print ?

  1. package com.abstractfactory.test;

  2. /**

  3. * 苹果味冰淇淋工厂类

  4. * @author ThinkPad

  5. *

  6. */

  7. public class AppleIceCreamFactory extends IceCreamFactory {

  8. @Override

  9. public DomesticIceCream produceDomesticIceCream() {

  10. // TODO 自动生成的方法存根

  11. return new AppleDomesticIceCream();

  12. }

  13. @Override

  14. public ImportedIceCream produceImportedIceCream() {

  15. // TODO 自动生成的方法存根

  16. return new AppleImportedIceCream();

  17. }

  18. }

package com.abstractfactory.test;

/**

  • 苹果味冰淇淋工厂类

  • @author ThinkPad

*/

public class AppleIceCreamFactory extends IceCreamFactory {

@Override

public DomesticIceCream produceDomesticIceCream() {

// TODO 自动生成的方法存根

return new AppleDomesticIceCream();

}

@Override

public ImportedIceCream produceImportedIceCream() {

// TODO 自动生成的方法存根

return new AppleImportedIceCream();

}

}

**

11、香蕉冰淇淋工厂类   BananaIceCreamFactory.java**

[java] view plain copy

print ?

  1. package com.abstractfactory.test;

  2. /**

  3. * 香蕉冰淇淋工厂类

  4. * @author ThinkPad

  5. *

  6. */

  7. public class BananaIceCreamFactory extends IceCreamFactory {

  8. @Override

  9. public DomesticIceCream produceDomesticIceCream() {

  10. // TODO 自动生成的方法存根

  11. return new BananaDomesticIceCream();

  12. }

  13. @Override

  14. public ImportedIceCream produceImportedIceCream() {

  15. // TODO 自动生成的方法存根

  16. return new BananaImportedIceCream();

  17. }

  18. }

package com.abstractfactory.test;

/**

  • 香蕉冰淇淋工厂类

  • @author ThinkPad

*/

public class BananaIceCreamFactory extends IceCreamFactory {

@Override

public DomesticIceCream produceDomesticIceCream() {

// TODO 自动生成的方法存根

return new BananaDomesticIceCream();

}

@Override

public ImportedIceCream produceImportedIceCream() {

// TODO 自动生成的方法存根

return new BananaImportedIceCream();

}

}

**

12、草莓冰淇淋工厂类   StrawberryIceCreamFactory.java**

[java] view plain copy
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

img

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

image.png

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

image.png

  • Kafka的集群
  • 第一个Kafka程序
  • image.png

afka的生产者

image.png

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

image.png

image.png

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

image.png

  • Kafka实战之削峰填谷

image.png

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-yewbtqS7-1711628530381)]

[外链图片转存中…(img-uTZVlFzX-1711628530382)]

[外链图片转存中…(img-KlfMj9OD-1711628530383)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

img

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

[外链图片转存中…(img-6oPxa6vi-1711628530383)]

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

[外链图片转存中…(img-kmY1p6xg-1711628530383)]

  • Kafka的集群
  • 第一个Kafka程序
  • [外链图片转存中…(img-hdvk0xQc-1711628530383)]

afka的生产者

[外链图片转存中…(img-Ic3loGlf-1711628530384)]

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

[外链图片转存中…(img-BQRrz39C-1711628530384)]

[外链图片转存中…(img-7cduGQ7v-1711628530384)]

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-Df8Samzz-1711628530384)]

  • Kafka实战之削峰填谷

[外链图片转存中…(img-ZUxPdumm-1711628530385)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值