zoukankan      html  css  js  c++  java
  • 设计模式之抽象工厂模式

    理解了工厂方法模式后,再来看抽象工厂模式,就变得很容易了,这里是关于工厂方法的上篇随笔,请戳:简单工厂和工厂方法模式

    工厂方法模式中一个工厂只能生产一个产品,当要让一个工厂生产多个产品的时候,工厂方法模式就不怎么适用了,而抽象工厂是工厂方法的进一步抽象,抽象工厂就补足了工厂方法的短处,他们之间的角色是相同,只是抽象工厂在工厂方法基础上增加了为创建一组相关或相互依赖的产品对象的接口。

    抽象工厂的角色跟工厂方法的相同

    • 抽象工厂
    • 具体工厂
    • 抽象产品
    • 具体产品
    
    
    抽象工厂
    package com.songpu.dp.abstractfactory;
    public interface Factory {
    
    }
    
    
    具体工厂
    package com.songpu.dp.abstractfactory;
    public class FoodFactory implements Factory {
    	public Product createBread() {
    		return new Bread();
    	}
    
    package com.songpu.dp.abstractfactory;
    public class ToyFactory implements Factory {
    	public Product createMuppet() {
    		return new Muppet();
    	}	
    	public Product createBlock(){
    		return new Block();
    	} 
    }
    
    
    抽象产品
    package com.songpu.dp.abstractfactory;
    public interface Product {
    }
    
    package com.songpu.dp.abstractfactory;
    public interface Food extends Product {	
    }
    
    package com.songpu.dp.abstractfactory;
    public interface Toy extends Product {	
    }
    
    
    具体产品
    package com.songpu.dp.abstractfactory;
    public class Block implements Toy {
    	Block(){
    		System.out.println("Block被生产");
    	}
    }
    
    package com.songpu.dp.abstractfactory;
    public class Muppet implements Toy {
    	Muppet() {
    		System.out.println("Muppet被生产");
    	}
    }
    
    package com.songpu.dp.abstractfactory;
    public class Bread implements Food {
    	Bread(){
    		System.out.println("Bread被生产");
    	}
    }
    
    package com.songpu.dp.abstractfactory;
    public class Cake implements Food {
    	Cake() {
    		System.out.println("Cake被生产");
    	}
    }
    
    

    最后看一下执行结果

    Bread被生产
    Cake被生产
    Block被生产
    Muppet被生产
    
  • 相关阅读:
    BZOJ4245: [ONTAK2015]OR-XOR(前缀和)
    [HDU 4433]locker[DP]
    近期刷题的c语言总结。
    《BackboneJS框架的技巧及模式》(4)完结篇
    x+2y+3z=n的非负整数解数
    [置顶] 程序员看婚姻
    BNU29368:Check the Identity(栈)
    Python解决codeforces ---- 1
    带你走进EJB--MDB实现发送邮件(3)
    JIRA简介
  • 原文地址:https://www.cnblogs.com/sweiqi/p/5992560.html
Copyright © 2011-2022 走看看