当前位置:   article > 正文

设计模式之-工厂模式_工厂方法模式的特征是

工厂方法模式的特征是

一、什么是工厂模式

    工厂模式属于创建型模式,创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

二、工厂模式的特点

    1.有一个创建对象的接口。

    2.创建过程在其子类执行。

三、优缺点

    优点:

        1、一个调用者想创建一个对象,只要知道其名称就可以了。

        2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

        3、屏蔽产品的具体实现,调用者只关心产品的接口。

    缺点:

        每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。(摘自:菜鸟教程)

四、分类

    1.简单工厂模式(静态工厂模式)

    2.工厂方法模式

    3.抽象工厂模式

五、简单工厂模式实例

    1、创建人类接口

  1. package com.xiao.designpattern.factorypattern;
  2. /**
  3. * @Description 人类接口
  4. * @Auther: 笑笑
  5. * @Date: 14:41 2018/10/31
  6. */
  7. public interface Person {
  8. public void eat();
  9. }

    2、创建男人‘类’

  1. package com.xiao.designpattern.factorypattern;
  2. /**
  3. * @Description 男人类,实现人类接口
  4. * @Auther: 笑笑
  5. * @Date: 14:41 2018/10/31
  6. */
  7. public class Male implements Person {
  8. @Override
  9. public void eat() {
  10. System.out.println("男人,是人类,要吃饭!");
  11. }
  12. }

    3、创建女人‘类’

  1. package com.xiao.designpattern.factorypattern;
  2. /**
  3. * @Description 女人类,实现人类接口
  4. * @Auther: 笑笑
  5. * @Date: 14:43 2018/10/31
  6. */
  7. public class Female implements Person{
  8. @Override
  9. public void eat() {
  10. System.out.println("女人,是人类,要吃饭!");
  11. }
  12. }

    4、创建人类工厂类

  1. package com.xiao.designpattern.factorypattern;
  2. /**
  3. * @Description 人类 工厂类
  4. * @Auther: 笑笑
  5. * @Date: 14:45 2018/10/31
  6. */
  7. public class PersonFactory {
  8. public Person getPerson(String personType){
  9. if(personType == null){
  10. return null;
  11. }
  12. if(personType.equalsIgnoreCase("MALE")){
  13. return new Male();
  14. }else if(personType.equalsIgnoreCase("FEMALE")){
  15. return new Female();
  16. }
  17. return null;
  18. }
  19. }

    5、使用工厂类分别获取男人、女人对象

  1. package com.xiao.designpattern.factorypattern;
  2. /**
  3. * @Description 使用人类 工厂类获取 男人或女人 对象
  4. * @Auther: 笑笑
  5. * @Date: 14:48 2018/10/31
  6. */
  7. public class FactoryDemo {
  8. public static void main(String[] args){
  9. PersonFactory personFactory = new PersonFactory();
  10. //获取男人对象
  11. Person male = personFactory.getPerson("male");
  12. //调用eat方法
  13. male.eat();
  14. //获取女人对象
  15. Person female = personFactory.getPerson("female");
  16. //调用eat方法
  17. female.eat();
  18. }
  19. }

    运行结果如下:

六、工厂方法模式

在统一的工厂接口中定义创建方法,特殊的工厂需要自己独立创建工厂,实现统一的工厂接口

  1. package com.xiao.designpattern.factorypattern.factorymethod;
  2. /**
  3. * @Description 创建人的统一工厂接口
  4. * @Auther: 笑笑
  5. * @Date: 21:45 2019/4/21
  6. */
  7. public interface PersonFactory {
  8. Person createPerson();
  9. }
  1. package com.xiao.designpattern.factorypattern.factorymethod;
  2. /**
  3. * @Description 创建男人的特殊工厂
  4. * @Auther: 笑笑
  5. * @Date: 21:46 2019/4/21
  6. */
  7. public class MaleFactory implements PersonFactory {
  8. @Override
  9. public Person createPerson() {
  10. return new Male();
  11. }
  12. }
  1. package com.xiao.designpattern.factorypattern.factorymethod;
  2. /**
  3. * @Description 创建女人的特殊工厂
  4. * @Auther: 笑笑
  5. * @Date: 21:47 2019/4/21
  6. */
  7. public class FemaleFactory implements PersonFactory {
  8. @Override
  9. public Person createPerson() {
  10. return new Female();
  11. }
  12. }
  1. package com.xiao.designpattern.factorypattern.factorymethod;
  2. /**
  3. * @Description 调用者
  4. * @Auther: 笑笑
  5. * @Date: 21:49 2019/4/21
  6. */
  7. public class client {
  8. public static void main(String[] args){
  9. //通过男人工厂创建男人
  10. MaleFactory maleFactory = new MaleFactory();
  11. Person person = maleFactory.createPerson();
  12. person.eat();
  13. //通过女人工厂创建女人
  14. FemaleFactory femaleFactory = new FemaleFactory();
  15. Person person1 = femaleFactory.createPerson();
  16. person1.eat();
  17. }
  18. }

运行结果如下:

七、抽象工厂模式实例

  1. package com.xiao.designpattern.factorypattern.abstractfactory;
  2. /**
  3. * @Description 创建人的工厂
  4. * @Auther: 笑笑
  5. * @Date: 22:24 2019/4/21
  6. */
  7. public interface PersonFactory {
  8. Money HasMoney();
  9. }
  1. package com.xiao.designpattern.factorypattern.abstractfactory;
  2. /**
  3. * @Description 钱接口
  4. * @Auther: 笑笑
  5. * @Date: 22:20 2019/4/21
  6. */
  7. public interface Money {
  8. void money();
  9. }
  10. /**
  11. * @Description 很多钱的类
  12. * @Auther: 笑笑
  13. * @Date: 22:21 2019/4/21
  14. */
  15. class ManyMoney implements Money{
  16. @Override
  17. public void money() {
  18. System.out.println("很多很多钱!");
  19. }
  20. }
  21. /**
  22. * @Description 很少钱的类
  23. * @Auther: 笑笑
  24. * @Date: 22:24 2019/4/21
  25. */
  26. class LittleMoney implements Money{
  27. @Override
  28. public void money() {
  29. System.out.println("很少很少钱!");
  30. }
  31. }
  1. package com.xiao.designpattern.factorypattern.abstractfactory;
  2. /**
  3. * @Description 穷人的工厂类
  4. * @Auther: 笑笑
  5. * @Date: 22:27 2019/4/21
  6. */
  7. class PoorPersonFactory implements PersonFactory{
  8. @Override
  9. public Money HasMoney() {
  10. return new LittleMoney();
  11. }
  12. }

 

  1. package com.xiao.designpattern.factorypattern.abstractfactory;
  2. /**
  3. * @Description 富人的工厂类
  4. * @Auther: 笑笑
  5. * @Date: 22:26 2019/4/21
  6. */
  7. class WealthyPersonFactory implements PersonFactory{
  8. @Override
  9. public Money HasMoney() {
  10. return new ManyMoney();
  11. }
  12. }
  1. package com.xiao.designpattern.factorypattern.abstractfactory;
  2. /**
  3. * @Description 调用者
  4. * @Auther: 笑笑
  5. * @Date: 22:29 2019/4/21
  6. */
  7. public class Client {
  8. public static void main(String[] args){
  9. //通过富人的工厂类创建富人
  10. PersonFactory wealthyPersonFactory = new WealthyPersonFactory();
  11. Money money = wealthyPersonFactory.HasMoney();
  12. money.money();
  13. //通过穷人的工厂类创建穷人
  14. PersonFactory poorPersonFactory = new PoorPersonFactory();
  15. Money money1 = poorPersonFactory.HasMoney();
  16. money1.money();
  17. }
  18. }

运行结果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/222512
推荐阅读
  

闽ICP备14008679号