代码背景
工厂生产小球和对应的盒子,材质有两种,皮质的和钢制的
先写两种材质的小球
MagicPipe是管理工厂的类
package abstractMethod;
public abstract class AbstractFactory {
public abstract Ball MakeBallFactoryMethod();
}
package abstractMethod;
//管理工厂
public class MagicPipe {
// uml聚集 包含抽象工厂对象
public AbstractFactory abstractFactory;
// 传入某一个具体工厂 得到的是产品系列
public void setAbstractFactory(AbstractFactory abstractFactory) {
this.abstractFactory = abstractFactory;
}
// 公有接口
public Ball pop(){
System.out.println("准备创建中……");
return abstractFactory.MakeBallFactoryMethod();
}
}
package abstractMethod;
public class RubberBallFactory extends AbstractFactory{
public Ball MakeBallFactoryMethod() {
return new RubberBall();
}
}
package abstractMethod;
public class SteelBallFactory extends AbstractFactory{
public Ball MakeBallFactoryMethod() {
return new SteelBall();
}
}
package abstractMethod;
public abstract class Ball {
public abstract void prtInfo();
}
package abstractMethod;
public class SteelBall extends Ball{
public SteelBall() {
System.out.println("创建了钢球");
}
public void prtInfo(){
System.out.println("我是钢球");
}
}
package abstractMethod;
public class RubberBall extends Ball{
public RubberBall() {
System.out.println("创建了皮球");
}
public void prtInfo(){
System.out.println("我是皮球");
}
}
package abstractMethod;
public class Application {
public static void main(String[] args) {
System.out.println("欢迎进入坦克,请按下F键");
//创建皮球
MagicPipe mp = new MagicPipe();
mp.setAbstractFactory(new RubberBallFactory());
Ball b = mp.pop();
b.prtInfo();
}
}
添加盒子的元素
上面的代码时建立一个抽象工厂,可以创建两种材质的小球
接下来加入盒子的元素:
有一个抽象工厂生产小球和盒子
分别被 皮质厂 和 钢质厂 继承
皮质厂负责生产皮盒子和皮球
钢质厂负责生产钢盒子和钢球
package abstractMethod_Series;
public abstract class AbstractFactory {
public abstract Ball MakeBallFactoryMethod();
public abstract Box MakeBoxFactoryMethod();
}
package abstractMethod_Series;
public class RubberStyleFactory extends AbstractFactory{
public Ball MakeBallFactoryMethod() {
return new RubberBall();
}
public Box MakeBoxFactoryMethod() {
return new RubberBox();
}
}
package abstractMethod_Series;
public class SteelStyleFactory extends AbstractFactory{
public Ball MakeBallFactoryMethod() {
return new SteelBall();
}
@Override
public Box MakeBoxFactoryMethod() {
// TODO Auto-generated method stub
return new SteelBox();
}
}
MagicPipe是管理工厂的类
package abstractMethod_Series;
//管理工厂
public class MagicPipe {
// uml聚集 包含抽象工厂对象
public AbstractFactory abstractFactory;
// 传入某一个具体工厂 得到的是产品系列
public void setAbstractFactory(AbstractFactory abstractFactory) {
this.abstractFactory = abstractFactory;
}
// 公有接口
public Ball pop(){
System.out.println("准备创建中……");
return abstractFactory.MakeBallFactoryMethod();
}
public Box popBox(){
System.out.println("准备创建中……");
return abstractFactory.MakeBoxFactoryMethod();
}
}
package abstractMethod_Series;
public abstract class Ball {
public abstract void prtInfo();
}
package abstractMethod_Series;
public abstract class Box {
public abstract void prtInfo();
}
package abstractMethod_Series;
public class RubberBall extends Ball{
public RubberBall() {
System.out.println("创建了皮球");
}
public void prtInfo(){
System.out.println("我是皮球");
}
}
package abstractMethod_Series;
public class RubberBox extends Box {
public RubberBox() {
System.out.println("创建了皮盒子");
}
public void prtInfo(){
System.out.println("我是皮盒子");
}
}
package abstractMethod_Series;
public class SteelBall extends Ball{
public SteelBall() {
System.out.println("创建了钢球");
}
public void prtInfo(){
System.out.println("我是钢球");
}
}
package abstractMethod_Series;
public class SteelBox extends Box {
public SteelBox() {
System.out.println("创建了钢盒子");
}
public void prtInfo(){
System.out.println("我是钢盒子");
}
}
package abstractMethod_Series;
public class Application {
public static void main(String[] args) {
System.out.println("欢迎进入坦克,请按下F键");
//创建皮球 /皮盒子
MagicPipe mp = new MagicPipe();
mp.setAbstractFactory(new RubberStyleFactory());
Ball ball;
Box box;
ball = mp.pop();
ball.prtInfo();
box = mp.popBox();
box.prtInfo();
//创建钢球 /钢盒子
mp.setAbstractFactory(new SteelStyleFactory());
ball = mp.pop();
ball.prtInfo();
box = mp.popBox();
box.prtInfo();
}
}
再将耦合到一起的工厂分开,建立子工厂
建立抽象的盒子工厂和小球工厂
小球工厂被皮球工厂和钢球工厂继承
盒子工厂被皮盒子工厂和钢盒子工厂继承
每个工厂生产一个产品,可以有更灵活的组合搭配
package abstractMethod_Series_level4;
// 小球的抽象工厂
public abstract class AbstractFactory1 {
public abstract Ball MakeBallFactoryMethod();
}
package abstractMethod_Series_level4;
public class RubberBallFactory extends AbstractFactory1{
public Ball MakeBallFactoryMethod() {
return new RubberBall();
}
}
package abstractMethod_Series_level4;
public class SteelBallFactory extends AbstractFactory1{
public Ball MakeBallFactoryMethod() {
return new SteelBall();
}
}
package abstractMethod_Series_level4;
// 盒子的抽象工厂
public abstract class AbstractFactory2 {
public abstract Box MakeBoxFactoryMethod();
}
package abstractMethod_Series_level4;
public class RubberBoxFactory extends AbstractFactory2{
@Override
public Box MakeBoxFactoryMethod() {
// TODO Auto-generated method stub
return new RubberBox();
}
}
package abstractMethod_Series_level4;
public class SteelBoxFactory extends AbstractFactory2{
@Override
public Box MakeBoxFactoryMethod() {
// TODO Auto-generated method stub
return new SteelBox();
}
}
package abstractMethod_Series_level4;
//管理工厂
public class MagicPipe {
// uml聚集 包含抽象工厂对象
public AbstractFactory1 abstractFactory1;
public AbstractFactory2 abstractFactory2;
// 传入某一个具体工厂 得到的是产品系列
public void setAbstractFactory1(AbstractFactory1 abstractFactory1) {
this.abstractFactory1 = abstractFactory1;
}
public void setAbstractFactory2(AbstractFactory2 abstractFactory2) {
this.abstractFactory2 = abstractFactory2;
}
// 公有接口
public Ball pop(){
System.out.println("准备创建中……");
return abstractFactory1.MakeBallFactoryMethod();
}
public Box popBox(){
System.out.println("准备创建中……");
return abstractFactory2.MakeBoxFactoryMethod();
}
}
package abstractMethod_Series_level4;
public abstract class Ball {
public abstract void prtInfo();
}
package abstractMethod_Series_level4;
public class RubberBall extends Ball{
public RubberBall() {
System.out.println("创建了皮球");
}
public void prtInfo(){
System.out.println("我是皮球");
}
}
package abstractMethod_Series_level4;
public class SteelBall extends Ball{
public SteelBall() {
System.out.println("创建了钢球");
}
public void prtInfo(){
System.out.println("我是钢球");
}
}
package abstractMethod_Series_level4;
public abstract class Box {
public abstract void prtInfo();
}
package abstractMethod_Series_level4;
public class RubberBox extends Box {
public RubberBox() {
System.out.println("创建了皮盒子");
}
public void prtInfo(){
System.out.println("我是皮盒子");
}
}
package abstractMethod_Series_level4;
public class SteelBox extends Box {
public SteelBox() {
System.out.println("创建了钢盒子");
}
public void prtInfo(){
System.out.println("我是钢盒子");
}
}
package abstractMethod_Series_level4;
public class Application {
public static void main(String[] args) {
System.out.println("工厂1:a1 a2 \n" + "工厂2:b1 b2");
System.out.println("欢迎进入坦克,请按下F键");
//创建皮球 /皮盒子
MagicPipe mp = new MagicPipe();
AbstractFactory1 f1 = new RubberBallFactory();
AbstractFactory1 f2 = new SteelBallFactory();
AbstractFactory2 fbox1 = new RubberBoxFactory();
AbstractFactory2 fbox2 = new SteelBoxFactory();
mp.setAbstractFactory1(f1);
mp.setAbstractFactory2(fbox1);
Ball ball;
Box box;
ball = mp.pop();
ball.prtInfo();
box = mp.popBox();
box.prtInfo();
}
}