一.抽象工厂定义

  上一讲我们说了一下工厂方法,那么我们如何对工厂进行抽象。

  因为工厂是生产产品的,现在我们需要工厂抽象,只生产抽象产品,不生产具体的产品,这同时也体现了java的多态。

  现在有2个抽象,一个是抽象工厂,另一个是抽象产品。

  下面介绍抽象产品到具体产品:

  产品的具体实现可以有多种方式,可以有抽象类去实现抽象产品中共有的方法,另一部分交给子类实现,这样,我们就可以把产品一些公有的属性抽象出来,一些

  特有的属性由子类根据自身条件实现,这样就可以有同种功能,不同型号的产品。

  下面介绍抽象工厂到具体工厂:

  抽象工厂是生产产品的,生产具体哪一款产品我们不得而知,但是我们可以通过前面的具体的产品来判断,生产同种类型的产品地方只能是具体类型工厂了,比如

  小米手机工厂只能生产小米手机,苹果手机工厂只生产苹果手机,这样我们就可以有具体的工厂了。下面看2个类型的示例:

//接口
interface Phone{
//打电话
void call();
//发短信
void sendMsg();
//品牌
void brand();
}
//抽象类,只实现部分功能
abstract class AbstractPhone implements Phone{ @Override
public void call() {
System.out.println("手机在打电话...");
}
@Override
public void sendMsg() {
System.out.println("手机在发信息...");
}
}
//具体实现类1:苹果手机
class ApplePhone extends AbstractPhone{ @Override
public void brand() {
System.out.println("苹果手机");
this.call();
this.sendMsg();
} }
//具体实现类2:小米手机
class XiaoMiPhone extends AbstractPhone{ @Override
public void brand() {
System.out.println("小米手机");
this.call();
this.sendMsg();
} }
//抽象工厂:生产手机
interface PhoneFactory{
Phone createPhone();
}
//具体工厂1:生产苹果手机
class ApplePhoneFactory implements PhoneFactory{ @Override
public Phone createPhone() {
return new ApplePhone();
}
}
//具体工厂2:生产小米手机
class XiaoMiFactory implements PhoneFactory{
@Override
public Phone createPhone() {
return new XiaoMiPhone();
}
}
//接口
interface Human{
void getColor();
void talk();
void getSex();
}
//抽象类,只实现部分功能
abstract class AbstractYellowHuman implements Human{
@Override
public void getColor() {
System.out.println("yellow color...");
} @Override
public void talk() {
System.out.println("yellow talk...");
}
}
//具体实现类1:具体实现类会完成父类接口中未完成的方法
class MaleYellowMan extends AbstractYellowHuman{
@Override
public void getSex() {
System.out.println("yellow...male");
}
}
//具体实现类2:具体实现类会完成父类接口中未完成的方法
class FemaleYellowMan extends AbstractYellowHuman{ @Override
public void getSex() {
System.out.println("yellow...female");
}
}
//抽象工厂
interface HumanFactory{
Human createYelloHuman();
} //具体工厂1:创建男性的工厂
class MaleFactory implements HumanFactory{
@Override
public Human createYelloHuman() {
return new MaleYellowMan(); //创建黄种人,男性角色
}
} //具体工厂2:创建女性的工厂
class FemaleFactory implements HumanFactory{
@Override
public Human createYelloHuman() {
return new FemaleYellowMan();
}
}

java23种设计模式之九: 抽象工厂方法模式的更多相关文章

  1. java23种设计模式(一)工厂方法模式

    在说工厂方法模式之前,先了解一下简单工厂模式.工厂方法模式其实是在简单工厂上面做了一些增强. 简单工厂模式:有一个专门的类来生产其他类的实例,生产的这些实例有一个共同父类.这个跟我们的多态有一点像. ...

  2. Android设计模式——抽象工厂方法模式

    1.抽象工厂方法模式:为了创建一组或相互依赖的对象提供一个接口,而不需要指定它们是具体类……无语 2.找个代码看看: 抽象工厂类<成员为接口> /** * 抽象工厂 * */ public ...

  3. Java设计模式(二) 工厂方法模式

    本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...

  4. java23种设计模式(一)-- 工厂模式、抽象工厂模式和单例模式

    一.工厂模式 1.定义统一的接口,并在接口中定义要实现的抽象方法. 2.创建接口的具体实现类,并实现抽象方法. 3.创建一个工厂类,根据传递的参数,生成具体的实现类对象,执行具体的方法. 优点: 1. ...

  5. 设计模式C#实现(九)——工厂方法模式和简单工厂

    工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 构成: 1.Product工厂方法创建的对象的接口 2.Concrete ...

  6. Java设计模式从精通到入门五 抽象工厂方法模式

    定义 抽象工厂类为创建一组相关和相互依赖的对象提供一组接口,而无需指定一个具体的类. ​ 这里我得把工厂方法模式得定义拿出来做一下比较:定义一个创建对象的接口,由子类决定实例化哪一个类.工厂方法是一个 ...

  7. Java设计模式学习笔记(三) 工厂方法模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...

  8. 【python设计模式-创建型】工厂方法模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...

  9. 设计模式C#合集--工厂方法模式

    简单工厂,代码: public interface ISpeak { public void Say(); } public class Hello : ISpeak { public void Sa ...

随机推荐

  1. jsp 页面 javax.servlet.jsp.JspException cannot be resolved to a type 异常

    <dependencies><dependency><groupId>javax.servlet</groupId><artifactId> ...

  2. 函数第一部分:经典的永远是简单的-Python基础前传(10)

    (一)前言 对于零基础学习Python的朋友,或者转行做数据分析的朋友,跟jacky交流最多的问题就是Python网络爬虫学习问题,比如说要爬取美团,或者说爬取携程等等,在爬取的过程中,这些朋友总是会 ...

  3. java1.8 lambda进行并行运算

    parallelStream()支持并行运算: package com.roocon.thread.t2; import java.util.Arrays; import java.util.List ...

  4. .NET开发人员的完美.gitignore文件

    # Build and Object Folders bin/ obj/ # Nuget packages directory packages/ ## Ignore Visual Studio te ...

  5. union all 和 union 的 区别

    https://www.cnblogs.com/wen-zi/p/9133754.html 主要: Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All:对 ...

  6. Java-JUC(零):Java:现有线程T1/T2/T3,如何确保T1执行完成之后执行T2,T3在T2执行完成之后执行。

    要实现多个线程执行完成先后,就要知道如何实现线程之间的等待,java线程等待实现是join.java的jdk中join方法实现如下: public final synchronized void jo ...

  7. ASP.NET MVC传递Model到视图的多种方式之通用方式的使用

    ASP.NET MVC传递Model到视图的多种方式总结——通用方式的使用 有多种方式可以将数据传递到视图,如下所示: ViewData ViewBag PartialView TempData Vi ...

  8. Kafka、RabbitMQ、RocketMQ、ActiveMQ消息中间件的对比--多年生产经验实践总结

    引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注. ...

  9. Thrift: Scalable Cross-Language Services Implementation

    http://thrift.apache.org/static/files/thrift-20070401.pdf

  10. 远程控制软件 mRemoteNG,管理多台虚拟机

    #下载 1.官网下载:https://mremoteng.org/2.当然也可以到这里下载:https://pan.baidu.com/s/11O_QNM3HudN3IyTiqqHmrQ,提取码:jm ...