设计模式之抽象工厂模式
2015-08-11 10:32
453 查看
设计模式之--抽象工厂模式
1,定义:提供一个创建一系列相关或者相互依赖对象的接口,而无需制定它们具体的类;
2,下面是抽象工厂模式的结构图:
3,抽象工厂模式的实现代码:
1),结构图:
2),代码
入口类Main.class:
public class Main {
public static void main(String[] args) {
BreadMaker breadMaker;
PizzaMaker pizzaMaker;
System.out.println("小面的面包店开业了");
System.out.println("顾客要买黑色面包");
IFactory breadFactory = new BlackBreadFactory();
breadMaker = breadFactory.CreateBread();
breadMaker.GetBread();
System.out.println("顾客要黑色巧克力披萨");
pizzaMaker = breadFactory.CreatePizza();
pizzaMaker.GetPizza();
}
}
工厂接口类IFactory.class:
public interface IFactory {
BreadMaker CreateBread();
PizzaMaker CreatePizza();
}
三个工厂类:
BlackBreadFactory.class,HoneyBreadFactory.class,WhiteBreadFactory.class:
public class BlackBreadFactory implements IFactory{
@Override
public BreadMaker CreateBread() {
// TODO Auto-generated method stub
return new BlackBread();
}
@Override
public PizzaMaker CreatePizza() {
// TODO Auto-generated method stub
return new BlackPizza();
}
}
public class HoneyBreadFactory implements IFactory{
@Override
public BreadMaker CreateBread() {
// TODO Auto-generated method stub
return new HoneyBread();
}
@Override
public PizzaMaker CreatePizza() {
// TODO Auto-generated method stub
return new HoneyPizza();
}
}
public class WhiteBreadFactory implements IFactory{
@Override
public BreadMaker CreateBread() {
// TODO Auto-generated method stub
return new WhiteBlead();
}
@Override
public PizzaMaker CreatePizza() {
// TODO Auto-generated method stub
return new WhitePizza();
}
}
两个父类:
BreadMaker,PizzaMaker:
public class BreadMaker {
public void GetBread(){ }
}
public class PizzaMaker {
public void GetPizza(){ }
}
相关子类:
BlackBread,BlackPizza,HoneyBread,HoneyPizza,WhiteBlead,WhitePizza:
public class BlackBread extends BreadMaker{
@Override
public void GetBread() {
// TODO Auto-generated method stub
super.GetBread();
System.out.println("小面做出了黑巧克力面包");
}
}
public class BlackPizza extends PizzaMaker{
@Override
public void GetPizza() {
// TODO Auto-generated method stub
super.GetPizza();
System.out.println("小面做出了黑巧克力披萨");
}
}
public class HoneyBread extends BreadMaker{
@Override
public void GetBread() {
// TODO Auto-generated method stub
super.GetBread();
System.out.println("小面做出了蜂蜜面包");
}
}
public class HoneyPizza extends PizzaMaker{
@Override
public void GetPizza() {
// TODO Auto-generated method stub
super.GetPizza();
System.out.println("小面烤出了蜂蜜披萨");
}
}
public class WhiteBlead extends BreadMaker{
@Override
public void GetBread() {
// TODO Auto-generated method stub
super.GetBread();
System.out.println("小面做出了白色巧克力面包");
}
}
public class WhitePizza extends PizzaMaker{
@Override
public void GetPizza() {
// TODO Auto-generated method stub
super.GetPizza();
System.out.println("小面做出了白巧克力披萨");
}
}
3),运行结果:
3,抽象工厂模式适用情况:
1),一个系列要独立于它的产品创建、组合和表示时;
2),一个系列要由于多个产品系列中的一个来配置时;
3),当要强调一系列相关的产品对象的设计以便进行联合使用时;
4),当要提供一个产品类库,而只有显示它们的接口而不是实现时;
1,定义:提供一个创建一系列相关或者相互依赖对象的接口,而无需制定它们具体的类;
2,下面是抽象工厂模式的结构图:
3,抽象工厂模式的实现代码:
1),结构图:
2),代码
入口类Main.class:
public class Main {
public static void main(String[] args) {
BreadMaker breadMaker;
PizzaMaker pizzaMaker;
System.out.println("小面的面包店开业了");
System.out.println("顾客要买黑色面包");
IFactory breadFactory = new BlackBreadFactory();
breadMaker = breadFactory.CreateBread();
breadMaker.GetBread();
System.out.println("顾客要黑色巧克力披萨");
pizzaMaker = breadFactory.CreatePizza();
pizzaMaker.GetPizza();
}
}
工厂接口类IFactory.class:
public interface IFactory {
BreadMaker CreateBread();
PizzaMaker CreatePizza();
}
三个工厂类:
BlackBreadFactory.class,HoneyBreadFactory.class,WhiteBreadFactory.class:
public class BlackBreadFactory implements IFactory{
@Override
public BreadMaker CreateBread() {
// TODO Auto-generated method stub
return new BlackBread();
}
@Override
public PizzaMaker CreatePizza() {
// TODO Auto-generated method stub
return new BlackPizza();
}
}
public class HoneyBreadFactory implements IFactory{
@Override
public BreadMaker CreateBread() {
// TODO Auto-generated method stub
return new HoneyBread();
}
@Override
public PizzaMaker CreatePizza() {
// TODO Auto-generated method stub
return new HoneyPizza();
}
}
public class WhiteBreadFactory implements IFactory{
@Override
public BreadMaker CreateBread() {
// TODO Auto-generated method stub
return new WhiteBlead();
}
@Override
public PizzaMaker CreatePizza() {
// TODO Auto-generated method stub
return new WhitePizza();
}
}
两个父类:
BreadMaker,PizzaMaker:
public class BreadMaker {
public void GetBread(){ }
}
public class PizzaMaker {
public void GetPizza(){ }
}
相关子类:
BlackBread,BlackPizza,HoneyBread,HoneyPizza,WhiteBlead,WhitePizza:
public class BlackBread extends BreadMaker{
@Override
public void GetBread() {
// TODO Auto-generated method stub
super.GetBread();
System.out.println("小面做出了黑巧克力面包");
}
}
public class BlackPizza extends PizzaMaker{
@Override
public void GetPizza() {
// TODO Auto-generated method stub
super.GetPizza();
System.out.println("小面做出了黑巧克力披萨");
}
}
public class HoneyBread extends BreadMaker{
@Override
public void GetBread() {
// TODO Auto-generated method stub
super.GetBread();
System.out.println("小面做出了蜂蜜面包");
}
}
public class HoneyPizza extends PizzaMaker{
@Override
public void GetPizza() {
// TODO Auto-generated method stub
super.GetPizza();
System.out.println("小面烤出了蜂蜜披萨");
}
}
public class WhiteBlead extends BreadMaker{
@Override
public void GetBread() {
// TODO Auto-generated method stub
super.GetBread();
System.out.println("小面做出了白色巧克力面包");
}
}
public class WhitePizza extends PizzaMaker{
@Override
public void GetPizza() {
// TODO Auto-generated method stub
super.GetPizza();
System.out.println("小面做出了白巧克力披萨");
}
}
3),运行结果:
3,抽象工厂模式适用情况:
1),一个系列要独立于它的产品创建、组合和表示时;
2),一个系列要由于多个产品系列中的一个来配置时;
3),当要强调一系列相关的产品对象的设计以便进行联合使用时;
4),当要提供一个产品类库,而只有显示它们的接口而不是实现时;
相关文章推荐
- PHP面向对象(OOP):PHP5接口技术(interface)
- 转正申请书,要如何写啊?
- eclipse向mysql插入中文乱码问题
- 骆驼命名法转小写分隔
- 日经社説 20150811 御巣鷹30年を機に空の安全を高めたい
- 选择彼此间可协调工作的框架
- GSON学习笔记之初识GSON
- 20-05-其他对象API(Date类-日期对象转成字符串)
- 20-06-其他对象API(Date类-字符串转成日期对象)
- Ubuntu之邮件服务器(Postfix, Dovecot, MySql)
- Virtual Game Realization Thinking
- 学习zepto.js(原型方法)
- 数据结构_希尔排序(分组加直接插入排序)
- 测试edit中数据是否合法
- 基于jQuery HTML5人物介绍卡片特效
- web.xml
- web.xml
- **浅述IOS成员变量(Member variables)和实例变量(Instance varialbes)的区别**
- codeforces 569B - Inventory
- String与StringBuffer的区别