05、工厂模式-简单工厂模式(静态工厂模式)

工厂模式包含多种形态,每种形态对应的实际情况不同,具体为以下三类:
简单工厂模式 simple factory
工厂方法模式 Factory method
抽象工厂模式  abstract factory
使用工厂模式的目的在于
对象的实例化从客户端代码中转移到非客户端代码中 -- 也就是实现 客户端和业务端的解耦
如果以 public static void main 看做是 客户端代码,那么 工厂类的模式就表示,在 main方法中,如果你要使用类A或者类B,那么在main方法中看不到 new A()或者 new B()等代码,而是在创建这些类的工厂类中才可以看到。

简单 工厂模式(simple factory) 属于类创建模式,又叫做静态工厂模式(static factory)。
使用简单工厂模式,在实际的环境中,一般有四个参与者(角色),分别:
工厂类角色:直接产品角色的调用者
抽象产品角色:接口或抽象类,负责具体产品角色的定义,及与客户端的交互。
具体产品角色:被工厂类创建的对象,也是客户端实际操作对象
客户端:调用工厂类产生实例,并调用实例的方法进行相应工作
包含例子如下:
    
  1. package com.yp;
  2. /**
  3. * 定义 People 抽象类
  4. * @author Administrator
  5. */
  6. public abstract class People{
  7. abstract void say();
  8. }
     
  1. package com.yp;
  2. public class Chinese extends People {
  3. void say() {
  4. System.out.println("说汉语");
  5. }
  6. }

    
  1. package com.yp;
  2. public class American extends People {
  3. void say() {
  4. System.out.println("Speak in English");
  5. }
  6. }
     
  1. package com.yp;
  2. public class PeopleFactory {
  3. public static People create(int type) {
  4. People p = null;
  5. if (1 == type) {
  6. p = new Chinese();
  7. } else if (2 == type) {
  8. p = new American();
  9. }
  10. return p;
  11. }
  12. }
最后的测试类,也就客户端代码:
    
  1. package com.yp;
  2. public class t {
  3. public static void main(String[] args) {
  4. People p = PeopleFactory.create(1);
  5. People p2 = PeopleFactory.create(2);
  6. p.say();
  7. p2.say();
  8. }
  9. }
执行结果如下:


分析:
在此模式下,客户端的角色,只能看到工厂类角色和产品抽象角色,而对产品实现角色是看不到的。

此模式的缺点
如果在客户端中需要新的类,拿以上的例子来说,加入要增加英国人,法国人,那么除了新增实际的类来继承People之外,工厂类也必须要调整,因为工厂类目前负责匹配前台传入值和实际的类的映射关系。








转载于:https://my.oschina.net/u/1182369/blog/406567

猜你喜欢

转载自blog.csdn.net/weixin_34137799/article/details/92083698
今日推荐