标签:style blog http color java 使用 io strong
1、抽象工厂模式的意图;
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
2、抽象工厂模式的适用性;
3、场景描述;
考虑一个生产多种不同风格的家具的工厂(FurnitureFactory),不同风格的家具系列可以提供不同的门、窗、地板等的组合,为同一所住房可以提供不同的外观和行为。
4、抽象工厂模式类图;
角色:
5、代码实现;
5.1 工程结构图;
5.1.2实例类图;
实例类图中的类基本对应设计模式的一般化类图。
其中FurnitureFactory是接口,ExpensiveDoor是Door的子类,ExpensiveFloor是Floor的子类,ExpensiveWindow是Window的子类。
5.2实践;
5.2.1 基本组件类;
Window.java
1 package com.crazysnail.furnitures; 2 3 public class Window { 4 public Window(){ 5 System.out.println("I‘m a ordinary window"); 6 } 7 }
Floor.java
1 package com.crazysnail.furnitures; 2 3 public class Floor { 4 public Floor(){ 5 System.out.println("I‘m a ordinary floor."); 6 } 7 }
Door.java
1 package com.crazysnail.furnitures; 2 3 public class Door { 4 public Door(){ 5 System.out.println("I‘m a ordinary door."); 6 } 7 }
ExpensiveWindow.java
1 package com.crazysnail.furnitures; 2 3 public class ExpensiveWindow extends Window { 4 public ExpensiveWindow(){ 5 System.out.println("I‘m a expensive window."); 6 } 7 }
ExpensiveFloor.java
1 package com.crazysnail.furnitures; 2 3 public class ExpensiveFloor extends Floor { 4 public ExpensiveFloor(){ 5 System.out.println("I‘m a expensive floor"); 6 } 7 }
ExpensiveDoor.java
1 package com.crazysnail.furnitures; 2 3 public class ExpensiveDoor extends Door{ 4 public ExpensiveDoor(){ 5 System.out.println("I‘m a expensive door."); 6 } 7 }
5.2.2工厂类;
FurnitureFactory.java
1 package com.crazysnail.abstractfactory; 2 3 //抽象工厂模式中对外开放的接口,接口中定义了抽象工厂能够生产的产品种类 4 public interface FurnitureFactory{ 5 public Window createWindow(); 6 public Floor createFloor(); 7 public Door createDoor(); 8 }
OrdinaryFurnitureFactory.java
1 package com.crazysnail.abstractfactory; 2 3 //普通家具的工厂类,组合了普通的Window、Floor、Door类作为一个系列来使用 4 public class OrdinaryFurnitureFactory implements FurnitureFactory { 5 @Override 6 public Window createWindow() { 7 return new Window(); 8 } 9 @Override 10 public Floor createFloor() { 11 return new Floor(); 12 } 13 @Override 14 public Door createDoor() { 15 return new Door(); 16 } 17 }
ExpensiveFurnitureFactory.java
1 package com.crazysnail.abstractfactory; 2 3 //昂贵家具工厂类,组合了昂贵的ExpensiveWindow、ExpensiveFloor、ExpensiveDoor类,作为一个系列来使用 4 public class ExpensiveFurnitureFactory implements FurnitureFactory { 5 @Override 6 public Window createWindow() { 7 return new ExpensiveWindow(); 8 } 9 @Override 10 public Floor createFloor() { 11 return new ExpensiveFloor(); 12 } 13 @Override 14 public Door createDoor() { 15 return new ExpensiveDoor(); 16 } 17 }
5.2.3 使用抽象工厂举例;
DecoretionCompany.java
1 package com.crazysnail.abstractfactory; 2 3 /** 4 * 5 * 6 * 易于交换产品系列 7 * 有利于控制产品的一致性,控制使用相同系列的门、窗、地板 8 * 提供给用户的都是一些系列化的产品 9 * 10 * But,难以支持新种类的产品; 11 * 12 * 提供给用户的接口仅仅是不同的家具工厂,但是用户并不知晓具体的类 13 * 14 */ 15 public class DecorationCompany { 16 public void decorateHouse(FurnitureFactory factory, House house){ 17 Window window = factory.createWindow(); 18 Door door = factory.createDoor(); 19 Floor floor = factory.createFloor(); 20 21 /*装饰*/ 22 house.addWindow(window); 23 house.addDoor(door); 24 house.addFloor(floor); 25 } 26 }
6、总结;
6.1 抽象工厂的优点;
6.2 抽象工厂的缺点;
标签:style blog http color java 使用 io strong
原文地址:http://www.cnblogs.com/-crazysnail/p/3923161.html