设计模式--创建模式--工厂方法模式

一、基本概念

  1、在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。

  2、角色

    A:抽象工厂(Factory)角色:担任这个角色的是工厂方法模式的核心,是具体工厂的抽象。
    B、具体工厂(ConcreteFactory)角色:担任这个角色的是实现了抽象工厂接口的具体类,用来创建产品。
    C、抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
    D、具体产品(ConcreteProduct)角色:这个角色实现了抽象产品角色所声明的接口。
    E、客户端类(Client):测试使用。

二、简单例子

    A:抽象工厂(Factory)

 1 package comm.pattern.create.factoryMethod;
 2 
 3 /**
 4  * 
 5  * @Title: PhoneFactory.java
 6  * @Package: comm.pattern.create.factoryMethod
 7  * @Description: 产品工厂
 8  * @author yangzhancheng
 9  * @2020年3月26日:下午4:50:47
10  *
11  */
12 public interface PhoneFactory {
13 
14     //创建手机
15     IPhone createPhone();
16 }

    B、具体工厂(ConcreteFactory)

            B-1:

 1 package comm.pattern.create.factoryMethod;
 2 
 3 /**
 4  * 
 5  * @Title: AppleFactory.java
 6  * @Package: comm.pattern.create.factoryMethod
 7  * @Description: 华为手机工厂
 8  * @author yangzhancheng
 9  * @2020年3月26日:下午5:16:59
10  *
11  */
12 public class HuaweiFactory implements  PhoneFactory{
13 
14     @Override
15     public IPhone createPhone() {
16         return new HuweiPhone();
17     }
18 
19 }

            B-2:

 1 package comm.pattern.create.factoryMethod;
 2 
 3 /**
 4  * 
 5  * @Title: AppleFactory.java
 6  * @Package: comm.pattern.create.factoryMethod
 7  * @Description: 苹果手机工厂
 8  * @author yangzhancheng
 9  * @2020年3月26日:下午5:16:59
10  *
11  */
12 public class AppleFactory implements  PhoneFactory{
13 
14     @Override
15     public IPhone createPhone() {
16         return new ApplePhone();
17     }
18 
19 }

    C、抽象产品(Product)

 1 package comm.pattern.create.factoryMethod;
 2 
 3 /**
 4  * 
 5  * @Title: IPhone.java
 6  * @Package: comm.pattern.create.factoryMethod
 7  * @Description: 手机产品
 8  * @author yangzhancheng
 9  * @2020年3月26日:下午4:44:51
10  *
11  */
12 public interface IPhone {
13 
14     //外观展示
15     void display();
16 }

    D、具体产品(ConcreteProduct)

            D-1:

 1 package comm.pattern.create.factoryMethod;
 2 
 3 /**
 4  * 
 5  * @Title: IPhone.java
 6  * @Package: comm.pattern.create.factoryMethod
 7  * @Description: 手机产品
 8  * @author yangzhancheng
 9  * @2020年3月26日:下午4:44:51
10  *
11  */
12 public class ApplePhone implements IPhone{
13 
14     //外观展示
15     public void display(){
16         System.out.println("苹果手机.....");
17     }
18 }

            D-2:

 1 package comm.pattern.create.factoryMethod;
 2 
 3 /**
 4  * 
 5  * @Title: IPhone.java
 6  * @Package: comm.pattern.create.factoryMethod
 7  * @Description: 手机产品
 8  * @author yangzhancheng
 9  * @2020年3月26日:下午4:44:51
10  *
11  */
12 public class HuweiPhone implements IPhone {
13 
14     //外观展示
15     public void display(){
16         System.out.println("华为手机.....");
17     }
18 }

    E、客户端类(Client)

 1 package comm.pattern.create.factoryMethod;
 2 
 3 import java.util.HashMap;
 4 
 5 /**
 6  * 
 7  * @Title: Client.java
 8  * @Package: comm.pattern.create.prototype
 9  * @Description: 描述该文件做什么
10  * @author yangzhancheng
11  * @2020年3月25日:下午10:34:05
12  *
13  */
14 public class Client {
15 
16     public static void main(String[] args) throws Exception{
17         
18         //教科书要求这么写
19         PhoneFactory huaweiFactory = (PhoneFactory) Class.forName("comm.pattern.create.factoryMethod.HuaweiFactory").newInstance();
20         PhoneFactory appleFactory  = (PhoneFactory) Class.forName("comm.pattern.create.factoryMethod.AppleFactory").newInstance();
21         
22         //也可以这么写
23         //PhoneFactory huaweiFactory = new HuaweiFactory();
24         //PhoneFactory appleFactory  = new AppleFactory();
25         
26         
27         IPhone huaweiPhone = huaweiFactory.createPhone();
28         IPhone applePhone = appleFactory.createPhone();
29 
30         huaweiPhone.display();
31         applePhone.display();
32     }
33 
34 }

允许结果

华为手机.....
苹果手机.....

三、总结

     后续补充。

猜你喜欢

转载自www.cnblogs.com/fating/p/12576126.html
今日推荐