factory工厂模式之抽象工厂AbstractFactory
* 抽象工厂:
意图在于创建一系列互相关联或互相依赖的对象。
* 每个工厂都会创建一个或多个一系列的产品
* 适用于:产品不会变动,开始时所有产品都创建好,然后根据分类获取想要的 某一类产品(很像spring容器)
代码解释:
1.创建产品接口:手机和它的实现子类
//手机接口
public interface MobileProduct { } //实现子类Android
public class Android implements MobileProduct{ public Android() {
System.out.println("生产一个Android手机...");
}
} //实现子类Apple
public class Apple implements MobileProduct{ public Apple() {
System.out.println("生产一个Apple手机...");
}
}
2.创建产品接口2:汽车,和它的实现子类
//第二种产品:汽车
public interface CarProduct { } //实现子类1:宝马
public class BaoMa implements CarProduct{ public BaoMa() {
System.out.println("生产一个宝马汽车...");
}
} //实现子类2:奔驰
public class BenChi implements CarProduct{ public BenChi() {
System.out.println("生产一个奔驰汽车...");
}
}
3.创建抽象父类(或者抽象接口)和方法:可以生产手机和汽车,但是具体生产那种手机和汽车,不一定(由子类决定),因为里面的方法返回也是抽象的
//这里写接口也可以,抽象类个人理解:具体能看见的事物;接口:看不见的
public abstract class AbstractFactory { /**
* 生产一个产品
* @return
*/
public abstract MobileProduct processMobile();
/**
* 生产一个产品
* @return
*/
public abstract CarProduct processCar();
}
4.实现2个生产系列产品的工厂
/**
* 生产 产品系列:一个苹果,一个宝马
* @author mlxs
*
*/
public class FactoryMothedA extends AbstractFactory{ @Override
public MobileProduct processMobile() {
return new Apple();
} @Override
public CarProduct processCar() {
return new BaoMa();
} }
/**
* 生产方式B 产品系列:一个安卓,一个奔驰
* @author mlxs
*
*/
public class FactoryMothedB extends AbstractFactory{ @Override
public MobileProduct processMobile() {
return new Android();
} @Override
public CarProduct processCar() {
return new BenChi();
}
}
5.客户端测试
public static void main(String[] args) {
System.out.println("-----------------生产系列A:苹果和宝马-------------------");
//生产系列A:苹果和宝马
AbstractFactory factory = new FactoryMothedA();
factory.processMobile();
factory.processCar();
System.out.println("\n-----------------生产系列B:安卓和奔驰-------------------");
//生产系列B:安卓和奔驰
AbstractFactory factoryB = new FactoryMothedB();
factory.processMobile(); factory.processCar(); }
6.结果:
-----------------生产系列A:苹果和宝马-------------------
生产一个Apple手机...
生产一个宝马汽车... -----------------生产系列B:安卓和奔驰-------------------
生产一个Apple手机...
生产一个宝马汽车...
缺陷:有新产品的时候,改动地方很多(产品类、系列工厂类、抽象工厂类都要改)
factory工厂模式之抽象工厂AbstractFactory的更多相关文章
- JAVA设计模式 3【创建型】理解工厂模式与抽象工厂模式
上一节我们已经学习了原型模式,稍微复习一下:通过重写Object 类的clone() 方法实现浅克隆,浅克隆也要实现Cloneable 标记接口.而深克隆则是将对象通过序列化和反序列化 的方式进行创建 ...
- c#工厂模式与抽象工厂模式
一. 工厂方法(Factory Method)模式 工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中. 工厂方法模式是简单工 ...
- C# 设计模式(1)——简单工厂模式、工厂模式、抽象工厂模式
1.前言 上一篇写了设计模式原则有助于我们开发程序的时候能写出高质量的代码(牵一发而不动全身),这个系列还是做个笔记温习一下各种设计模式,下面就看看简单工厂模式.工厂模式.抽象工厂模式. 2.简单工厂 ...
- C#设计模式--工厂模式和抽象工厂模式
话说有三大潮牌公司一直相互PK,有一天举办了一个活动让这三大公司来一个PK,我们来看看哪家公司的上衣做出来好看穿得舒服 现在我们有一个上衣的抽象产品让三大公司来做 //抽象产品 public inte ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂[转]
1 2 {<HeadFirst设计模式>工厂模式之抽象工厂 } 3 { 抽象工厂的产品 } 4 { 编译工具:Delphi7.0 ...
- 工厂模式[3] 抽象工厂 Abstract Factory
简介 1.简单工厂,或静态工厂,产品接口 定义:专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类或实现同一接口 优点:客户端可以直接消费产品,而不必关心具体产品的实现(不关心对象的 ...
- [19/04/23-星期二] GOF23_创建型模式(工厂模式、抽象工厂模式)
一.工厂模式(分为:简单工厂模式.工厂方法模式.抽象工厂模式) 实现了创建者和调用者的分离 核心本质:1.实例化对象,用工厂方法代替new操作:2.将选择实现类.创建对象统一管理和控制,从而将调用者跟 ...
- 设计模式之工厂模式VS抽象工厂
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- Objective-C 工厂模式(下) -- 抽象工厂模式
相比简单工厂模式, 只有一个工厂 能生产的手机也是固定的 抽象工厂模式类似于有很多家工厂, 当用户要买什么手机就创建对应的工厂去生产 比如用户要买iPhone就创建一个Apple工厂来生产手机, 要买 ...
随机推荐
- python字典和列表使用的要点
dicts = {} lists = [] dicts['name'] = 'zhangsan' lists.append(dicts) 这时候lists的内容应该是[{'name': 'zhangs ...
- innodb buffer pool flush机制
参考印风的博客: FLUSH操作的类型,总的来说,有三种刷新类型 BUF_FLUSH_LRU:表示从Buffer Pool的LRU上扫描并刷新 BUF_FLUSH_LIST:表示从Buffer P ...
- 160929、各数据库连接配置与maven依赖安装
最近做的项目都是maven的,据说maven是个东西.把依赖的jar文件的事情都委托出去辣!试着用了一下哈,效果还可以! 今天做了数据库配置这一块,特意把相关的东西总结出来,以备不时之需. MySQL ...
- Error: 16GU盘变1G,恢复
最近装win10,chromium os之后,删除U盘中的文件,发现不能删除,脑子一热格式化了,发现16G突然变成了1G,这不是坑爹吗,刚买的新U盘呀.立马百度,发现有说是买的被骗了,有的说使用某个软 ...
- Android剪切板传递数据传递序列化对象数据
一.剪切板的使用介绍 1. 剪切板对象的创建 使用剪切板会用到,ClipboardManager对象,这个对像的创建不可以使用构造方法,主要是由于没有提供public的构造函数(单例模式),需要使用A ...
- Understanding the RelationshipType Enumeration [AX 2012]
Understanding the RelationshipType Enumeration [AX 2012] 3 out of 3 rated this helpful - Rate this t ...
- ecshop搜索出现相关商品的效果滑动下拉效果
ecshop搜索栏效果如下 所需要的样式我们可以复制到style.css里: /*搜索滑动效果*/ .Menu { position:absolute; top:30px; left:7px; wid ...
- StringUtils中 isEmpty 和isBlank的区别
StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出Nu ...
- 20151124002 treeView 数型菜单的操作
20151124002 treeView 数型菜单的操作 protected void FillTree() { SqlConnection1 = new Syst ...
- JAVA基础知识之JVM-——通过反射查看类信息
Class实例 当类被加载之后,JVM中就会生成一个Class实例,通过这个实例就可以访问JVM中的这个类.有三种方式可以获取Class对象 使用Class的静态方法forName(完整包名) 调用类 ...