zoukankan      html  css  js  c++  java
  • 常见的设计模式 ----- 工厂模式

    1.工厂模式

    工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。

    例子:

    每个程序员都有自己擅长的语言,假如一个项目的开发语言是Java,

    这时项目经理就会到人力资源部门申请擅长Java的程序员。

    程序员接口定义

    1 public interface Programmer {
    2     public void sayHello ();
    3 }

    JAVA程序员实现类

    1 public class JavaProgrammer implements Programmer {
    2     @Override
    3     public void sayHello() {
    4         System.out.println("I'm a JavaProgrammer.");
    5     }
    6 }

    PHP程序员实现类

    1 public class PhpProgrammer implements Programmer {
    2     public void sayHello() {
    3         System.out.println("I'm a PhpProgrammer.");
    4     }
    5 }

    (1.1)普通工厂模式

    普通工厂模式工厂类的定义

     1 public class ProgrammerFactory {
     2     final static String JAVA = "Java";
     3     final static String PHP = "php";
     4     
     5     public Programmer findProgrammer (String kind){
     6         if (JAVA.equals(kind)) {
     7             return new JavaProgrammer();
     8         } else if (PHP.equals(kind)) {
     9             return new PhpProgrammer();
    10         } else {
    11             return null;
    12         }
    13     }
    14 }

    使用方法:

    1     /**
    2      * @普通工厂模式
    3      */
    4     public static void main(String[] args) {
    5         ProgrammerFactory factory = new ProgrammerFactory();
    6         Programmer pg = factory.findProgrammer(ProgrammerFactory.JAVA);
    7         pg.sayHello();
    8     }

     (1.2)多个工厂模式

    多个工厂模式工厂类的定义

     1 public class ProgrammerFactory {
     2     
     3     public Programmer getJavaProgrammer() {
     4         return new JavaProgrammer();
     5     }
     6     
     7     public Programmer getPhpProgrammer() {
     8         return new PhpProgrammer();
     9     }
    10     
    11 }

    使用方法:

    1     /**
    2      * @多个工厂方法模式
    3      */
    4     public static void main(String[] args) {
    5         ProgrammerFactory factory = new ProgrammerFactory();
    6         Programmer pg = factory.getPhpProgrammer();
    7         pg.sayHello();
    8     }

    (1.3)静态工厂模式

    将多个工厂模式的工厂方法加上静态属性。

    静态工厂模式工厂类的定义

     1 public class ProgrammerFactory {
     2     
     3     public static Programmer getJavaProgrammer() {
     4         return new JavaProgrammer();
     5     }
     6     
     7     public static Programmer getPhpProgrammer() {
     8         return new PhpProgrammer();
     9     }
    10     
    11 }

    使用方法:

    1     /**
    2      * @静态工厂方法模式
    3      */
    4     public static void main(String[] args) {
    5         Programmer pg = ProgrammerFactory.getJavaProgrammer();
    6         pg.sayHello();
    7     }

    (1.4)抽象工厂模式

    为工厂类抽出一个共同接口

    1 public interface Provider {
    2     public Programmer getProgrammer();
    3 }

    抽象工厂模式工厂类的定义

    1 public class JavaProgrammerFactory implements Provider {
    2     @Override
    3     public Programmer getProgrammer() {
    4         return new JavaProgrammer();
    5     }
    6 }
    1 public class PhpProgrammerFactory implements Provider {
    2     @Override
    3     public Programmer getProgrammer() {
    4         return new PhpProgrammer();
    5     }
    6 }

    使用方法:

    1     /**
    2      * @抽象工厂方法模式
    3      */
    4     public static void main(String[] args) {
    5         Provider provider = new JavaProgrammerFactory();
    6         Programmer pg = provider.getProgrammer();
    7         pg.sayHello();
    8     }

    这个模式的好处是,如果你现在想增加一门语言的程序员,则只需做一个实现类,实现Programmer接口,同时做一个工厂类,实现Provider接口,就OK了,无需去改动现成的代码。这样做,拓展性较好!

  • 相关阅读:
    java代码split分割数字类
    P1330 封锁阳光大学
    1022 舞会2
    1626 爱在心中
    P2024 食物链(two)
    P1196 银河英雄传说
    P1892 团伙
    P1546 最短网络(最小生成树)
    烦人的幻灯片(拓扑)
    例4.15 奖金(拓扑排序)
  • 原文地址:https://www.cnblogs.com/keyiei/p/3593047.html
Copyright © 2011-2022 走看看