设计模式-抽象工厂模式

1.为什么需要抽象工厂模式:

  提供对象的使用接口,隐藏对象的创建过程。

2.类图结构:

      

3.参与角色

AbstractFactory 提供创建对象的接口。 ConcreteFactory 提供真正创建对象的实现类,用于组合并创建不同的对象,实现一个产品族。 AbstractProduct 提供对象的使用接口。 ConcreteProduct 提供真正的适用对象,隐藏该对象的创建过程,是工厂创建的对象。 Client 使用者,通过抽象工厂接口,使用不同的具体工厂方法创建对象组合,从而直接使用对象,无需关注对象的创建过程。

4.适用场景

   1 系统独立于它的产品创建、组合和表示。即无需关心内部对象时如何创建的,怎么创建的,什么含义。

  2 系统需要多个产品组合中的一个配置。由于对象很多,能够组合出的组合非常多,而系统只是使用某一个组合。

  3 强调的对象的组合结果,而不是他们具体的接口和实现。

5.Demo

产品接口及具体产品类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Engine.java
package org.factory.abstractFactory;
 
public interface Engine {
    void run();
    void start();
}
class LuxuryEngine implements Engine{
 
    @Override
    public void run() {
        System.out.println("转的快!");
    }
 
    @Override
    public void start() {
        System.out.println("启动快!可以自动启停!");
    }
     
}
 
class LowEngine implements Engine{
     
    @Override
    public void run() {
        System.out.println("转的慢!");
    }
     
    @Override
    public void start() {
        System.out.println("启动慢!");
    }
     
}
复制代码
 1 Seat.java
 2 package org.factory.abstractFactory;
 3 
 4 public interface Seat {
 5     void massage();
 6 }
 7 
 8 class LuxurySeat implements Seat {
 9 
10     @Override
11     public void massage() {
12         System.out.println("可以自动按摩!");
13     }
14     
15 }
16 
17 class LowSeat implements Seat {
18 
19     @Override
20     public void massage() {
21         System.out.println("不能按摩!");
22     }
23     
24 }
25 
26 package org.factory.abstractFactory;
27 
28 public interface Tyre {
29     void revolve();
30 }
31 class LuxuryTyre implements Tyre {
32 
33     @Override
34     public void revolve() {
35         System.out.println("旋转不磨损!");
36     }
37     
38 }
39 class LowTyre implements Tyre {
40 
41     @Override
42     public void revolve() {
43         System.out.println("旋转磨损快!");
44     }
45     
46 }
复制代码

工厂接口及实现类

package org.factory.abstractFactory;
 2 
 3 public interface CarFactory {
 4     Engine createEngine();
 5     Seat createSeat();
 6     Tyre createTyre();
 7 }
 8 
 9 package org.factory.abstractFactory;
10 
11 public class LowCarFactory implements CarFactory {
12 
13     @Override
14     public Engine createEngine() {
15         // TODO Auto-generated method stub
16         return new LowEngine();
17     }
18 
19     @Override
20     public Seat createSeat() {
21         // TODO Auto-generated method stub
22         return new LowSeat();
23     }
24 
25     @Override
26     public Tyre createTyre() {
27         // TODO Auto-generated method stub
28         return new LowTyre();
29     }
30 
31 }
32 
33 package org.factory.abstractFactory;
34 
35 public class LuxuryCarFactory implements CarFactory {
36 
37     @Override
38     public Engine createEngine() {
39         // TODO Auto-generated method stub
40         return new LuxuryEngine();
41     }
42 
43     @Override
44     public Seat createSeat() {
45         // TODO Auto-generated method stub
46         return new LuxurySeat();
47     }
48 
49     @Override
50     public Tyre createTyre() {
51         // TODO Auto-generated method stub
52         return new LuxuryTyre();
53     }
54 
55 }
Client类

package org.factory.abstractFactory;
 2 
 3 public class Client {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         CarFactory  factory = new LuxuryCarFactory();
 8         Engine e = factory.createEngine();
 9         e.run();
10         e.start();
11         
12         
13     }
14 
15 }



Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值